文件(P213)
打开文件
f = open('1.txt', 'r+')
- 函数
open
位于自动导入的模块IO
中, 文件名为第一个参数, 此外还有一个可选参数mode
为文件模式 mode
常见值:'r'
: 读取模式(默认值)'w'
: 写入模式, 文件不存在时创建, 既有文件内容将被删除'x'
: 独占写入模式, 在文件存在时引发FileExistsError
'a'
: 附加模式'b'
: 二进制模式(与其他模式结合使用)'t'
: 文本模式(默认值, 与其他模式结合使用)'+'
: 读写模式(与其他模式结合使用)
- 关键字
encoding
和error
指定文本模式下的编码和错误处理- 文本模式读取时将其他行尾换行符
'\r'
和'\r\n'
替换为'\n'
, 写入时将'\n'
替换为系统默认换行尾符(os.linesep
), 如果要禁止转换换行符可以将关键字参数newline
设置为空字符串, 如果要指定只将'\r'
,'\r\n'
视为合法的行尾字符, 可将参数指定为相应的字符, 这样读取时不会转换, 但写入时会将'\n'
转换为指定的行尾字符
- 文本模式读取时将其他行尾换行符
文件的基本方法
-
在文本模式和二进制模式中, 分别将
str
和bytes
类用作数据 -
f.write(string)
: 将指定的字符串写入到文件既有内容的后面并返回写入的字符数 -
f.close()
: 关闭文件 要确保文件得以关闭, 可以使用
try/finally
语句, 并在finally
语句中调用close
, 或者使用with
语句, 到达语句末尾时将自动关闭文件with open('1.txt', 'w') as f: f.write('1111')
-
f.seek(offset[, whence])
: 将当前位置移到offset
(偏移量)和whence
(默认为0, 代表相对文件开头, 1代表相对当前位置, 2代表相对文件末尾)指定的地方 -
f.tell()
: 返回当前位于文件什么位置 -
f.read()
: 读取制定个字符或字节并返回, 如果不指定数量, 将返回剩余全部(到达文件尾返回空字符串) -
readline
: 读取一行, 一个可选参数表示最多读取多少字符(到达文件末尾返回空字符串) -
readlines
: 读取所有行, 以列表的形式返回它们 -
writelines
: 将字符串列表写入文件, 注意写入时不会自动添加换行符号
管道(P215)
在bash等shell中, 可使用管道(|)将前一个命令的标准输出链接到下一个命令的标准输入:
cat f.txt | python p.py | sort
文件迭代
-
使用循环读取文件, 当读到末尾时根据函数返回的空字符串结束循环(
read()
,readline()
) -
一次性读入全部(
readlines()
,read()
) -
迭代大型文件时, 可以使用
fileinput
进行延迟行迭代(每次只读取需要的部分), 具体见上一章的:import fileinput for line in fileinput.input('1.txt'): print(line)
-
直接迭代文件(文件是可迭代的)
for line in open('1.txt'): print(line)