前面大家了解python是怎么操作文件的了,也学习过文件读取和写入模式的一些细节以及文件定位等等,这节课主要是深入了解文件读写的细节控制,容错方法和关闭文件的细节,另外还有一种简写方法with语句来操作文件读写。下面来一一讲解。
1.文件读取:单行读取,多行读取和按字节读取,控制读取内容量
f = open('a.txt', 'r')
content = f.read(3) # 3表示读取3个字节,同时下标会向右移动三个字节
content = f.readline() # 表示读取一行,每次读取后指针移动一行
content = f.readlines() # 把文件按照换行符进行读取,返回一个列表print(content)
f.close()
2.文件对象遍历
这里要理解一个概念,文件读取后存放在一个对象f中,这个f对象是可迭代的对象,可以借助以下方法来验证一下,然后在对文件对象进行遍历。
f = open('files/123.jpg', 'r')
print(f)
print(type(f))import collections.abc
print(isinstance(f, collections.abc.Iterator)) # 由此可见f也属于迭代器
for i in f:
print(i, end='')
if f.readable(): # 通过readable()函数做一个容错处理
content = f.readlines()
for i in content:
print(i, end='')
f.close()
注意:一般情况下文件不是很大使用read()和readlines()方法直接读取整个文件,readline()是一行一行的读取,适合处理较大文件,f是一个迭代器,使用for循环遍历也可以处理大文件。
3.文件写入操作
f = open('files/a.txt', 'a')
if f.writable(): # 容错
print(f.write('aaa')) # 返回结果是写入字符的长度,不是文件中字符的长度
f.close()
4.关闭文件操作:文件关闭后会自动释放资源,其次还会立即清空缓冲区的数据内容到磁盘文件,否则可能会导致文件内容的丢失,使用断点验证
f.flush() # 通过这个方法也可以清空缓冲区文件,执行磁盘写入
# 刷新缓冲区的三种情况:
# 1.关闭文件时自动刷新;
# 2.手动调用flush函数刷新;
# 3.缓冲区已满会自动刷新
f = open('files/abcd.txt', 'w')
f.write('aaa') # 到这里内容还不能写入文件,只有刷新缓冲区或关闭后才能写入
f.flush()
5.with简写:使用with语句,不用关闭和属性操作,with语句中已经从底层帮为你解决了这个问题
with open('files/abc.txt', 'w') as f:
f.write('aaaaaa')
6.编码和解码
with open('files/abc.txt', 'wb', encoding='utf-8') as f:
str = 'aaaaaaaaaaaaaaaaaaaa'
f.write(str)
with open('files/abc.txt', 'wb') as f:
str = 'aaaaaaaaaaaaaaaaaaaa'
f.write(str.encode('utf-8'))
with open('files/abc.txt', 'rb') as f:
data = f.read()
print(data)
print(type(data)) # 字节类型数据,想使用转为字符串
new_data = data.decode('utf-8') # 编码和解码类型应该一致,否则会报错,特别是有中文字符时
print(new_data)
print(type(new_data))
with open('files/abc.txt', 'rb', errors='ignore') as f:
# errors='ignore'表示忽略编码错误
pass
视频地址:11-4【python自学网】文件操作-文件读写和关闭操作 python基础入门精讲视频教程_哔哩哔哩_bilibili
文章来源:Python自学网 http://www.wakey.com.cn/document-file-readline.html