文件处理
f=open(‘文件’,’r’) 打开一个文件
f.close() 关闭文件,相当于保存
1、字符编码
在文件处理过程中,首先有一个重要的概念,就是字符编码
字符编码:把人类的字符编译成计算机能认识的数字
字符编码表:就是一张字符与数字对应关系的表
ascii
gbk
utf-8 (硬盘中常用编码)
unicode (内存中常用编码)
unicode ---->encode(‘utf-8’) 编码----> bytes
bytes ----> decode(‘utf-8’)解码 ----> Unicode
原则:字符以什么格式编译的,就要以什么格式解码
python3中的字符串分为两种
x='egon' 默认存为unicode
y=x.encode('utf-8') 使用encode编码为bytes
python2中字符串也分为两种
x=u'egon' 加u表示存为Unicode格式,与python3的字符串一样
y='alex' 默认存为bytes
2、文件模式
r 文本模式的读,在文件不存在,不会创建新文件
w 文本模式的写,文件存在则清空,不存在则创建
a 文本模式的追加,文件存在光标跳到文件末尾,文件不存在创建
rb 即直接从硬盘中读取bytes
wb 以二进制写模式打开
ab 以二进制追加模式打开
r+ 读的时候可写
w+ 写的时候可读
a+ 追加时可读写
a. r模式
f.read() #一次性读取文本中全部的内容,以字符串的形式返回结果
read()的使用:
read(3) #文件打开方式为文本模式时,代表读取3个字符
#文件打开方式为b模式时,代表读取3个字节
#unicode格式中3个字节=1个字符
控制光标的移动(都是以字节为单位):
f.seek() #控制光标移动几个字节
有三种模式:
0 从首字节开始
1 b模式下运行,以当前光标所在的位置为参照物
2 b模式下运行,以最后一个字节为参照物
练习:模拟tail –faccess.log
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# python3 tail.py -f access.log
import
time
import
sys
with
open
(r
'%s'
%
sys.argv[
2
],
'rb'
) as f:
f.seek(
0
,
2
)
while
True
:
line
=
f.readline()
if
line:
print
(line.decode(
'utf-8'
),end
=
'')
else
:
time.sleep(
0.2
)
|
truncate() #文件的打开方式为可写,从文件开头开始截取,留下指定字节之后的字节
f.readline() #只读取文本第一行的内容,以字符串的形式返回结果
f.readlines() #读取文本所有内容,并且以数列的格式返回结果,一般配合for in使用
f.readble() #判断文件是否有读的权限,返回布尔值
b. w模式
f.write() #写入文件,换行需要手动写换行符\n
f.writelines() #一次写入多行
c. a模式
f.tell() #查看光标位置
with open(‘文件’,’w’,encoding=’utf-8’) as f:
f.write(‘11111\n’) #会把文件的内容赋值给f,执行完毕会自动close
python中把脚本后的参数传入脚本内的方法:
import sys
print(sys.argv)
一个cp文件的python小脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import
sys
#python3 copy.py source.file target.file
if
len
(sys.argv) <
3
:
print
(
'Usage:python3 copy.py source.file target.file'
)
sys.exit()
#r'C:\Users\Administrator\PycharmProjects\python18期周末班\day3\test.jpg'
with
open
(r
'%s'
%
sys.argv[
1
],
'rb'
) as read_f,\
open
(r
'%s'
%
sys.argv[
2
],
'wb'
) as write_f:
for
line
in
read_f:
write_f.write(line)
|