文件读写
读文件
try:
# windows下utf8
f = open('./README.md', 'r', encoding='utf8', errors='ignore')
print(f.read())
finally:
f and f.close()
# 用with简化
with open('./README.md', 'r', encoding='utf8') as f:
print(f.read())
# 迭代读取大文件
with open('./README.md', 'r', encoding='utf8') as f:
# readline()可以每次读取一行内容
for line in f.readlines():
# 把末尾的'\n'删掉
print(line.strip())
# 读取二进制文件
f = open('/Users/michael/test.jpg', 'rb')
f.read() # b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
写文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件
可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险
with open('./test2.md', 'a', encoding='utf8') as f:
f.write('Hello, python!')
# 文件内字符替换,把你好替换为hi,然后读取内容到内存中
with open('test.txt','r') as f:
s = f.readlines()
# 接着打开文件,用replace替换掉你内存中的内容,然后写入文件
with open('test.txt','w') as w:
for i in s:
w.write(i.replace('你好','hi'))
StringIO和BytesIO
StringIO
在内存中读写str。
from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')