[Python/文件操作] fileinput 模块: 简化文件输入操作的Python标准库
概述: fileinput 模块: 简化文件输入操作的Python标准库
模块简介
Fileinput模块是Python标准库的一部分,用于简化文件输入操作。它允许你轻松地读取单个或多个文件的内容。
- fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。
- 该模块的
input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性读取所有行。
- 用
fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。
核心API
input
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])
fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
- files: # 文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
- inplace: # 是否将标准输出的结果写回文件,默认不取代(False)
- backup: # 备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
- bufsize: # 缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
- mode: # 读写模式,默认为只读
- openhook: # 该钩子用于控制打开的所有文件,比如说编码方式等;
案例实践
CASE 读取1到N个文件
import fileinput
# 读取单个文件
with fileinput.input(files='example.txt') as f:
for line in f:
print(line, end='')
# 读取多个文件
file_list = ['file1.txt', 'file2.txt', 'file3.txt']
with fileinput.input(files=file_list) as f:
for line in f:
print(line, end='')
CASE 替换文件内容
- Fileinput 模块还允许替换文件中的特定字符串。
import fileinput
with fileinput.input(files='example.txt', inplace=True) as f:
for line in f:
print(line.replace('old_text', 'new_text'), end='')
CASE 自定义分隔符
- 你可以自定义分隔符来处理文件内容。
import fileinput
with fileinput.input(files='example.txt', mode='r', openhook=fileinput.hook_encoded('utf-8')) as f:
for line in f:
fields = line.split('|') # 使用竖线作为分隔符
print(fields)
CASE 处理标准输入和命令行参数
- Fileinput 模块不仅可以处理文件,还可以处理标准输入和命令行参数。
import fileinput
# 处理标准输入
for line in fileinput.input():
print(f"Read from standard input: {line}", end='')
# 处理命令行参数
for line in fileinput.input(files=['file1.txt', 'file2.txt']):
print(f"Read from file: {line}", end='')
CASE 利用fileinput对多文件操作,并原地修改内容
- 样本文件
c:Python27> type 1.txt
first
second
c:Python27> type 2.txt
third
fourth
+ test.py
```python
import fileinput
def process(line):
return line.rstrip() + ' line'
for line in fileinput.input(['1.txt','2.txt'],inplace=1):
print process(line)
结果输出
c:Python27> type 1.txt
first line
second line
c:Python27> type 2.txt
third line
fourth line
- 命令行方式
#test.py
import fileinput
def process(line):
return line.rstrip() + ' line'
for line in fileinput.input(inplace = True):
print process(line)
#执行命令
c:Python27> python test.py 1.txt 2.txt
CASE 利用fileinput实现文件内容替换,并将原文件作备份
- 样本文件/data.txt
Python
Java
C/C++
Shell
- test.py
import fileinput
for line in fileinput.input('data.txt',backup='.bak',inplace=True):
print( line.rstrip().replace('Python','Perl') ) #或 print( line.replace('Python','Perl') )
结果/data.txt
Perl
Java
C/C++
Shell
并生成: data.txt.bak 文件
X 参考文献
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号