fileinput模块让你轻松遍历文本文件的所有行,与readlines()不同的是fileinput模块是逐行进行遍历,而readlines是一次读取全部到内存中. 使用python script.py file1.txt file2.txt ...基本使用方法如下:
import fileinput for line in fileinput.input(): process(line)
fileinput中重要的函数: 1.input(files[,inplace,[backup]]):遍历多个输入的文件.inplace设置为True的时候直接在源文件中修改,backup参数将文件名扩展到通过原始文件创建的备份文件中,input=1类似于sed -i参数 2.filename():返回当前文件的名称 3.lineno():返回当前累计的行数 4.filelineno():返回当前文件的行数 5.isfirstline():检查当前行是否是文件的第一行 6.isstdin():检查最后一行是否来至sys.stdin 7.nextfile():关闭当前文件,移动到下一个文件,这在逐个文件进行处理的时候可能很有用 8.close():关闭序列 下面这个是书上的例子,在文件每一行的末尾添加一个#行号
[[email protected] ~]# cat 1.py #!/usr/bin/env python import fileinput import os for line in fileinput.input(inplace=1,backup='.bak'): line=line.rstrip() num=fileinput.lineno() print '%-80s # %2i' % (line,num)
解释一下,inplace=1说明直接在源文件进行修改,backup='.bak'说明在修改之前会将源文件备份,文件名我源文件名.bak line.rstrip()是将每行的末尾的空格删除 fileinput.lineno()是记录当前处理的行 %-80s的意思是左对齐,宽度为80,如果行的长度不满80则最后以空格填充,如果满80则返回全部数据 %2i的意思是宽度为2的整形 下面是具体的处理结果:
[[email protected] ~]# cat 1.txt Traceback (most recent call last): File "./1.py", line 10, in <module> print a[i] IndexError: list index out of range [[email protected] ~]# ./1.py 1.txt [[email protected] ~]# cat 1.txt Traceback (most recent call last): # 1 File "./1.py", line 10, in <module> # 2 print a[i] # 3 IndexError: list index out of range # 4 [[email protected] ~]# ls 1.txt* 1.txt 1.txt.bak [[email protected] ~]# cat 1.txt.bak Traceback (most recent call last): File "./1.py", line 10, in <module> print a[i] IndexError: list index out of range