这里讨论与输入和输出有关的一些问题。
输出格式
print 是 Python 的一个标准函数,主要用于给程序使用者输出信息,产生的信息默认显示在交互窗口里。Python 称之为 "标准输出文件",print 把输出送到这里。
简单使用 print,它逐个输出实参表达式的值,两个输出之间用空格分隔。
实际上 print 还有几个特殊参数,它们都有默认值,如需改变,可以用关键字实参形式提供:sep 给定不同输出项之间的分隔字符串,默认值为 ' '(包含一个空格的串)
end 给定一次调用的最后结束串,默认值为 '\n'(一个换行符的串)
file 给定输出目标,默认值是 sys.stdout,即 "标准输出文件"
所有非关键字实参都看作要求输出的实参,求值并转换到字符串形式后输出
如果需要特定的输出形式,也可以做到。有两种基本方法。第一种方法是自己构造合乎需要的字符串,而后送给 print(或其他输出函数)输出。第二种方法(更强大)是利用 Python 的输出格式控制功能。
由于输出格式控制是很具体的问题,这里不打算介绍。有关情况可以参考教程 7.1 节的讨论,以及标准库手册 4.7 节对字符串类型和 6.1 节对格式化串的讨论。
文件输入和输出
大量数据一定保存在操作系统管理下的文件里,产生的成批结果也需要存入文件。Python 语言提供了针对文件的输入输出功能。下面介绍 Python 中与文件有关的基本功能。
要使用一个文件,需要先打开;用完后需要关闭。打开文件后就可以使用了。
Python 用标准函数 open 打开文件,函数 open 完成时将建立一个与指定文件关联的文件对象。打开文件时要说明文件的使用方式。假定要打开的文件名字是 file1.dat,准备读入这个文件的内容,就应该用读模式(用字符串 'r' 表示)打开文件,写法是:inf = open('file1.dat', 'r')
语句执行后变量 inf 的值就是 open 建立的文件对象,它关联于文件 file1.dat,可以通过这个对象使用该文件。
如果希望打开文件 file2.out,用于保存程序结果,应该用写模式(用字符串 'w' 表示)打开文件,写法是:outf = open('file2.out', 'w')
上面两种打开模式都假定输入或输出的是文本文件,这种文件的内容为一个字符序列(可能很长)。其中可能包括各种可见字符、空格、换行符和一些特殊字符。
Python 标准库为输入和输出提供了很丰富的功能,参看标准库手册 16.2 节有关 io 库的介绍。
从文件输入
对于打开的读文件,可以执行输入操作。一个常见操作是读入文件内容:
inf = open('file1.dat', 'r')
data = inf.read()
data2 = inf.read()
第一个操作把文件 file1.dat 的所有内容读入,做成一个(可能很长的)字符串赋给标量 data,执行后 data 的值就是包含被读入文件里所保存的文本的所有字符(包括其中出现的特殊字符)的字符串。如果文件已经读完,继续读就会得到一个空串,因此 data2 的值将为一个空串。
另一常见操作是按行读入,例如inf = open('file2.dat', 'r')
line1 = inf.readline()
line2 = inf.readline()
(假定打开文件后没做前面写的 read() 操作)这两个语句之后变量 line1 和 line2 的值将是文件里第一行和第二行的内容。如果文件里的一行最后有换行字符,这个字符将成为 readline() 返回的字符串里最后一个字符。(注意:一个文件里的最后一行可能没有最后的换行)。
如果 readline() 读到的是一个空行,它将返回只包含一个换行字符的字符串,因为这就是该行的内容。如果调用时文件已读完,readline() 返回一个空字符串(可用于判断文件是否已经读完)。
打开的文本文件对象也是一种迭代器对象,可以直接作为 for 语句循环变量的数据源。人们经常用下面形式处理文本文件输入:for line in inf :
... line ...
这相当于
while TRUE :
line = inf.readline()
if line = '':
break
... line ...
显然前一写法既简单又清晰。
如果想简单地输入一个文件的各行并建立一个以这些行作为元素的list,下面两种形式都行:lineList = list(inf)
lineList = inf.readlines()
readlines(...) 返回以所有读入的行为元素的表。
向文件输出
基本的文本文件输出操作是 write,其参数应该是一个字符串,这个函数返回实际输出的字符个数。例如
>>> f.write('A test output with dot and newline.\n')
36
要输出其他类型的数据,应首先用 str() 将其转换为字符串。
文件还有其他打开模式,用内置函数 open 的参数的形式描述,有关情况见标准库手册第2节 "内置函数" 中有关 open 的说明。
以文本方式打开得到的文件对象支持的所有操作见标准库手册 16.2.3.1 节 io.IOBase 和 io.RawIOBase,后者是 open 返回的文件对象的类型。
有关 Python 内置输入输出(input/output,简称 I/O)功能的更全面介绍见标准库手册 16.2 节。
有关文件的详细信息
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)