当Python学到一定程度的时候,就要跟文件打交道了。到以后自己的写程序,对文件的操作是非常频繁的,因此学会对文件的操作也是Python学习的一项基础任务。
打开文件与读取文件
- 基本的打开操作
f = open('test.txt','r'encoding='gbk') #用只读形式打开文件,r是只写,a是追加
#windows系统默认是gbk编码,但如果你的文件是utf-8,则一定要设置成utf-8,否则会打不开
data = f.read() #读取文件内容,并赋值给data变量
print(data)
f.close()
#打开后要记得关闭文件,否则内容不会瞬时保存,而且文件多了会影响程序的执行
代码片的第一行,一般将文件打开后都用一个变量来接收,便于在Python的IDLE中操作,本篇文章默认都是用变量 f 来接收打开后的文件。
- 另外一些读取函数
f.readable()
: 判断文件是否可读,返回布尔值
f.readline()
:只读一行
print(f.readlin(),end='')
#其中,end=’'表示去掉换行
文件的写
- 只写的方式打开
f = open('test.txt','w',encoding='gbk') #用只写的方式打开文件
data = f.read()
print(data)
f.close()
#只写方式读取文件,文件存在,会把文件清空;文件不存在,会新建一个文件
- 内容的几种写入
f = open('test.txt','a',encoding='gbk')
f.write('窝拆\n') #\n表示换行
f.writelines('写到最后了']) #writelines()是写一个列表进去,但列表中元素必须字符串类型
f.close()
- 内容的追加
f = open('test.txt','a',encoding='gbk')
f.write('写到文件最后了') #以追加的方式写入,会默认追加到最后
f.close()
with open方式打开文件
- 打开文件后每次都要手动关闭感觉很麻烦,那就用with open,就不用手动关闭文件了
with open('test.txt','w',encoding='gbk') as f:
f.write('不需要手动关闭文件了')
- 从源文件中读到一个文件后写到另外一个文件
with open('test.txt','w',encoding='gbk') as fone:
with open('test2.txt','r',encoding='gbk') as ftwo: #将test2作为源文件
data = ftwo.read()
fone.write(data)
- 慎用w和w+(因为会把源文件清空)
r+, w+, a+, x+都表示可读,可写
rb是以二进制的方式读,读出来的内容的一长串字节形式的字符,wb是以二进制的方式写
文件打开后的编码问题
以二进制形式打开文件对文件的处理比较方便,但有很多需要注意的编码问题
- 将二进制解码
f = open('test.txt','rb') #rb,rw的形式不能指定编码
data = f.read() #读出来的内容将会是一串二进制字节
print(data)
print(data.decode('gbk')) #用decode()将二进制字节解码后就可以看到正常的内容了
- bytes()编码+解码
f = open('test.txt','wb') #rb,rw的形式不能指定编码
#f.write() #wb无法写入字符串,只能写入二进制格式
data1 = bytes('这是用bytes()转化成二进制',encoding='gbk') #bytes函数必须指定编码
f.write(data)
f.close()
- encode()编码+解码
f = open('test.txt','wb') #rb,rw的形式不能指定编码
data = '这是用encode()转化成二进制'.encode('utf-8')
f.write(data)
f.close()
- 二进制处理文件的好处
计算机中所有的文件都是二进制存储的,所以不管是图片还是视频都可以用二进制的方式在Python中打开,然后进行处理
f.closed():
判断文件是否关闭
f.encoding():
查看文件打开时的编码
文件操作的readlines()和truncate()
- readlines()
f = open('test.txt','r+',encoding='utf-8',newline='')
#多了一个newline=''表示读取文件中真正的换行符号
data = f.readlines() #读取完整内容,包括换行符
print(data)
- truncate()
f = open('test.txt','r+',encoding='utf-8')
f.truncate(2)
#截取前10个字节的内容,前提是可写的方式打开
#而r+,w+,a+,x+都表示可读,并且可写(慎用w+)