标准库
此处不详细讲解 参考PDF第10章
文件
文件和流
打开文件
如果当前目录中有一个名为somefile.txt的文本文件(可能是使用文本编辑器创建的),则可像下面这样打开它:
>>> f = open('somefile.txt','r')
第二个参数代表打开文件模式,默认模式为rt
,具体模式如下
文件基本方法
- 读取和写入
调用 f.write(string) 时,你提供的字符串都将写入到文件中既有内容的后面
>>> 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!'
- 读取和写入行
要读取一行(从当前位置到下一个分行符的文本),可使用方法 readline 。
调用这个方法时,可不提供任何参数(在这种情况下,将读取一行并返回它);
也可提供一个非负整数,指定 readline 最多可读取多少个字符。
因此,如果 some_file. readline() 返回的是 'Hello, World!\n' ,那么some_file.readline(5) 返回的将是 'Hello' 。
要读取文件中的所有行,并以列表的方式返回它们,可使用方法 readlines 。
方法 writelines 与 readlines 相反 接受一个字符串列表(实际上,可以是任何序列或可迭代对象),并将这些字符串都写入到文件(或流)中
写入时不会添加换行符,因此你必须自行添加
- 关闭文件
要确保文件得以关闭,可使用一条 try / finally 语句,并在 finally 子句中调用 close 。
# 在这里打开文件
try:
# 将数据写入到文件中
finally:
file.close()
实际上,有一条专门为此设计的语句,那就是 with 语句。
with open("somefile.txt") as somefile:
do_something(somefile)
迭代文件内容
每次一个字符(或字节)
with open(filename) as f:
char = f.read(1)
while char:
process(char)
char = f.read(1)
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)
读取所有内容
with open(filename) as f:
for char in f.read():
process(char)
with open(filename) as f:
for line in f.readlines():
process(line)
使用 fileinput 实现延迟行迭代
import fileinput
for line in fileinput.input(filename):
process(line)
文件迭代器
with open(filename) as f:
for line in f:
process(line)
for line in open(filename):
process(line)