一, 介绍
fileinput 模块可以对一个或多个文件中的内容进行迭代, 遍历等操作, 我们常用的 open 函数是对一个文件进行读写操作.
fileinput 模块的 input() 函数比 open 函数更高效和好用, 体现在:
input() 函数生成一个迭代器, 保证了在遇到大文件的读取时不会占用太大的内存.
用 fileinput 对文件进行循环遍历, 格式化输出, 查找, 替换等操作, 还能获取每一行的行号等等, 非常方便.
二, fileinput 读取文件函数 input 的使用格式
- fileinput.input (files='filename', inplace=False, backup='', bufsize=0, mode='r', openhook=None)
- files: # 文件的路径列表, 默认是 stdin 方式, 多文件 ['1.txt','2.txt',...]
- inplace: # 是否将标准输出的结果写回文件, 默认不取代
- backup: # 备份文件的扩展名, 只指定扩展名, 如. bak. 如果该文件的备份文件已存在, 则会自动覆盖.
- bufsize: # 缓冲区大小, 默认为 0, 如果文件很大, 可以修改此参数, 一般默认即可
- mode: # 读写模式, 默认为只读
- openhook: # 该钩子用于控制打开的所有文件, 比如说编码方式等;
三, fileinput 中的常用函数
函数 | 描述 |
input([files[, inplace[, backup]]]) | 帮助迭代多个输入流中的行 |
filename() | 返回当前文件的名称 |
lineno() | 返回(累计的)当前行号 |
filelineno() | 返回在当前文件中的行号 |
isfirstline() | 检查当前行是否是文件中的第一行 |
isstdin() | 检查最后一行是否来自 sys.stdin |
nextfile() | 关闭当前文件并移到下一个文件 |
close() | 关闭序列 |
fileinput.input 是最重要的函数, 它返回一个迭代器对象, 如果要处理多个文件, 可以向这个函数提供一个或多个文件名.
还可将参数 inplace 设置为 True(inplace=True), 对于你访问的每一行, 都需打印出替代内容, 这些内容将被写回到当前输入文件中, 此时可选参数 backup 用于给从原始文件创建的备份文件指定扩展名.
四, 示例
1, 读取多个文件
- # a.txt 文件的内容
- """
- 我
- 是
- 好
- 人
- """
- # b.txt 文件的内容
- """
- 他
- 是
- 坏
- 人
- """
- # 读取一个文件
- for line in fileinput.input("a.txt"):
- print(line)
- # 读取多个文件
- for line in fileinput.input(["a.txt", "b.txt"]):
- print(line)
2, 修改文件并备份原文件
- # -*_ coding:utf-8 -*-
- import fileinput
- for line in fileinput.input("a.txt", backup=".bak", inplace=True):
- line = line.replace("我", "小明")
- print(line)
- # 结果
当前文件夹会生成 a.txt.bak 文件, 内容是之前的内容,
而 a.txt 文件已经被修改了, 把 "我" 变成了 "小明"
3, 输出当前行号和行内容
- # -*_ coding:utf-8 -*-
- import fileinput
- for line in fileinput.input("a.txt"):
- lineno = fileinput.filelineno()
- print lineno, line
- # 结果
1 我
2 是
3 好,
4 人
4, 输出文件名
- # -*_ coding:utf-8 -*-
- import fileinput
- for line in fileinput.input("a.txt"):
- # 在第一行前面先输出文件名
- if fileinput.isfirstline():
- print fileinput.filename()
- print line
- # 结果
- a.txt
我
是
好,
人
其他函数, 都是类似的使用方法, 这里就不全部介绍了.
来源: http://www.bubuko.com/infodetail-3360696.html