本节书摘来自异步社区《Python参考手册(第4版•修订版)》一书中的第1章,第1.4节,作者David M. Beazley,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.4 文件输入和输出
以下程序可打开一个文件并逐行读取该文件的内容:
f = open("foo.txt") # 返回一个文件对象
line = f.readline() # 调用文件的readline()方法
while line:
print line, # 后面跟','将忽略换行符
# print(line,end='') # 在Python 3中使用
line = f.readline()
f.close()
open()函数返回一个新的文件对象。调用该对象的方法可以执行各种文件操作。readline()方法读取一行内容,包括结尾的换行符在内。读至文件结尾时将返回空字符串。
在这个例子中,程序只是循环读取了文件foo.txt中的所有行。如果程序在像这样的数据集(如输入中的行、数字、字符串等)上进行循环,那么这通常就称为迭代。因为迭代是很常见的一种操作,所以Python为其提供了一条专用语句for,用于迭代内容项。例如,同样的程序可以写成下面这种更简洁的形式:
for line in open("foo.txt"):
print line,
要将程序的输出写入一个文件中,需要在print语句后面使用>>指定一个文件,如下所示:
f = open("out","w") # 打开文件以便写入
while year <= numyears:
principal = principal * (1 + rate)
print >>f,"%3d %0.2f" % (year,principal)
year += 1
f.close()
>>
语法只能用在Python 2中。如果使用Python 3,可将print语句改为以下内容:
print("%3d %0.2f" % (year,principal),file=f)
另外,文件对象支持使用write()方法写入原始数据。例如,前一例子中的print语句也可以写成下面这样:
f.write("%3d %0.2f\n" % (year,principal))
尽管这些例子处理的都是文件,但同样的技巧也适用于标准的解释器输出流和输入流。例如,如果想交互式地读取用户输入,可以从文件sys.stdin中读取。如果要将数据输出到屏幕上,可以写入文件sys.stdout中,这与在输出print语句所生成数据时所用的文件是同一个文件。例如:
import sys
sys.stdout.write("Enter your name :")
name = sys.stdin.readline()
在Python 2中,这段代码还可以简化为:
name = raw_input("Enter your name :")
在Python 3中,raw_input()函数叫做input(),但它们的工作方式完全相同。