读文件
f = open('/Users/michael/test.txt', 'r') # 读取UTF-8编码的文本文件 f = open('/Users/michael/gbk.txt', 'r', encoding='gbk') # 读取非UTF-8编码的文本文件,传入encoding参数 f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore') # errors参数,表示如果遇到编码错误后如何处理 # 如果文件不存在,open()函数就会抛出一个IOError的错误 f.read() # 一次读取文件的全部内容 f.read(size) # 每次最多读取size个字节的内容 f.readline() # 可以每次读取一行内容 f.readlines() # 一次读取所有内容并按行返回list
保证读取的文件无论出错与否都能正常的关闭:
- try...finally...:
try: f = open('/path/to/file', 'r') print(f.read()) finally: if f: f.close()
- with(原理同try..finally...,且不用写close())
with open('/path/to/file', 'r') as f: print(f.read())
写文件(写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件)
with open('/Users/michael/test.txt', 'w') as f: f.write('Hello, world!')
StringIO(在内存中读写str,操作的只能是str)
from io import StringIO f = StringIO('Hello! Hi! Goodbye!') while True: s = f.readline() if s == '': break print(s.strip())
BytesIO(操作二进制数据)
from io import BytesIO f = BytesIO() f.write('中文'.encode('utf-8')) print(f.getvalue()) # b'xe4xb8xadxe6x96x87'