文件 IO
file
不再是 3.x 中的内置名称(open
仍然有效)。
文件 I / O 的内部细节已经移动到标准库 io
模块,这也是 StringIO
的新家:
import io
assert io.open is open # the builtin is an alias
buffer = io.StringIO()
buffer.write('hello, ') # returns number of characters written
buffer.write('world!\n')
buffer.getvalue() # 'hello, world!\n'
文件模式(文本与二进制)现在确定通过读取文件(以及写入所需的类型)生成的数据类型:
with open('data.txt') as f:
first_line = next(f)
assert type(first_line) is str
with open('data.bin', 'rb') as f:
first_kb = f.read(1024)
assert type(first_kb) is bytes
文本文件的编码默认为 locale.getpreferredencoding(False)
返回的任何内容。要明确指定编码,请使用 encoding
关键字参数:
with open('old_japanese_poetry.txt', 'shift_jis') as text:
haiku = text.read()