文件
打开文件
函数open的参数mode的最常见取值
值 | 描述 |
---|---|
‘r’ | 读取模式(默认值) |
‘w’ | 写入模式 |
‘x’ | 独占写入模式 |
‘a’ | 附加模式 |
‘b’ | 二进制模式(与其他模式结合使用) |
‘t’ | 文本模式(默认值,与其他模式结合使用) |
‘+’ | 读写模式(与其他模式结合使用) |
- 显式地指定读取模式的效果与根本不指定模式相同
- 写入模式让你能够写入文件,并在文件不存在时创建它
- 独占写入模式更进一步,在文件已存在时引发FileExistsError异常
- 在写入模式下打开文件时,既有内容将被删除(截断),并从文件开头处开始写入;如果要在既有文件末尾继续写入,可使用附加模式
文件的基本方法
- 读取和写入
>>> f = open('somefile.txt', 'w')
>>> f.write('Hello, ')
7
>>> f.write('World!')
6
>>> f.close()
>>> f = open('somefile.txt', 'r')
>>> f.read(4)
'Hell'
>>> f.read()
'o, World!'
PS:
随机存取
- seek seek(offset[, whence])将当前位置(执行读取或写入的位置)移到 offset 和whence 指定的地方
- tell 返回当前位于文件的什么位置
- 使用管道重定向输出
$ cat somefile.txt | python somescript.py | sort
- 读取和写入行
- readline 成行地读取,也可提供一个非负整数,指定readline最多可读取多少个字符
- readlines 读取文件中所有行
- writelines 接受一个字符串列表(实际上,可以是任何序列或可迭代对象),并将这些字符串都写入到文件(或流)中
PS:
没有writeline,可以使用write
- 关闭文件
- close 将文件关闭
- flush 重置缓冲,让所做的修改反映到磁盘文件中
PS:根据使用的操作系统和设置,flush可能出于锁定考虑而禁止其他正在运行的程序访问这个文件
# try/finally
# 在这里打开文件
try:
# 将数据写入到文件中
finally:
file.close()
# with
with open("somefile.txt") as somefile:
do_something(somefile)
迭代文件内容
- 每次一个字符(或字节)
with open(filename) as f:
while True:
char = f.read(1)
if not char: break
process(char)
- 每次一行
with open(filename) as f:
while True:
line = f.readline()
if not line: break
process(line)
- 读取所有内容(文件不太大时)
# 使用read迭代字符
with open(filename) as f:
for char in f.read():
process(char)
# 使用readlines迭代行
with open(filename) as f:
for line in f.readlines():
process(line)
- 使用fileinput实现延迟行迭代
# 只读取实际需要的文本部分,或使用while循环和readline结合
import fileinput
for line in fileinput.input(filename):
process(line)
- 文本迭代器
with open(filename) as f:
for line in f:
process(line)
小结
类似于文件的对象:类似于文件的对象是支持read和readline(可能还有write和writelines)等方法的对象。
打开和关闭文件:要打开文件,可使用函数open,并向它提供一个文件名。如果要确保即便发生错误时文件也将被关闭,可使用with语句。
模式和文件类型:打开文件时,还可指定模式,如’r’(读取模式)或’w’(写入模式)。通过在模式后面加上’b’,可将文件作为二进制文件打开,并关闭Unicode编码和换行符替换。
标准流:三个标准流(模块sys中的stdin、stdout和stderr)都是类似于文件的对象,它们实现了UNIX标准I/O机制(Windows也提供了这种机制)。
读取和写入:要从文件或类似于文件的对象中读取,可使用方法read;要执行写入操作,可使用方法write。
读取和写入行:要从文件中读取行,可使用readline和readlines;要写入行,可使用writelines。
迭代文件内容:迭代文件内容的方法很多,其中最常见的是迭代文本文件中的行,这可通过简单地对文件本身进行迭代来做到。还有其他与较旧Python版本兼容的方法,如使用readlines。