读文件 - 读取整个文件 / 逐行读取 / 文件路径,
读取文本文件时,需要在使用open
函数时指定好带路径的文件名
f = open('test.txt', 'r', encoding='utf-8')
'utf-8'为编码,如果不指定默认值为None。
如果文件不存在,open()函数就会抛出一个IOError
的错误,文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。
为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现:
try:
f=open('text.txt', 'r', encoding='utf-8')
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
finally:
if f:
f.close
可引用with语句自动调用close()方法:
with open('/path/to/file', 'r')as f:
print(f.read)
还可以使用for-in
循环逐行读取或者用readlines
方法将文件按行读取到一个列表容器中,
with open('test.txt', mode='r') as f:#for循环逐行读取
for line in f:
print(line, end='')
time.sleep(0.5)
with open('text.txt') as f:#按行读取
lines = f.readlines()
print(lines)
readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。
写文件 - 覆盖写入 / 追加写入 / 文本文件 / 二进制文件
写文件和读文件是一样的,唯一区别是调用open()
函数时,传入标识符'w'
或者'wb'
表示写文本文件或写二进制文件:
f = open('tsxt.txt', 'w')
f.write('怼怼!')
f.close()
with open('text.txt', 'w') as f:
f.write('怼怼!')
关于open()的mode参数
'r':读
'w':写
'a':追加
'r+' == r+w(可读可写,文件若不存在就报错(IOError))
'w+' == w+r(可读可写,文件若不存在就创建)
'a+' ==a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
JSON数据格式 / json模块的应用
Json 模块提供了四个方法: dumps、dump、loads、load
1. json序列化方法:
dumps:无文件操作 dump:序列化+写入文件
2. json反序列化方法:
loads:无文件操作 load: 读文件+反序列化
3. json模块序列化的数据 更通用
picle模块序列化的数据 仅python可用,但功能强大,可以序列号函数
4. json模块可以序列化和反序列化的 数据类型 见 python对象(obj) 与json对象的对应关系表
5. 格式化写入文件利用 indent = 4