详解 Python 操作多个文件fileinput模块使用方法(图文详解1)
fileinput
模块是Python中用于操作多个文件的内置模块,它提供了一种简单和高效的方式来处理来自多个输入源的数据。下面我们来详细介绍一下它的使用方法、底层原理以及相关示例代码。
- 使用方法:
fileinput.input(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
: 这个函数是fileinput
模块的主要接口,它允许你读取和修改来自多个输入源的数据。files
参数: 指定要处理的文件列表,可以是文件名列表或者'-'
表示标准输入。inplace
参数: 如果设置为True
,则会将修改后的内容直接写回到输入文件中。backup
参数: 如果设置为非空字符串,则会在写回文件之前备份原始文件,备份文件名为原文件名加上该参数值。bufsize
参数: 设置I/O缓冲区大小,默认为0表示使用系统默认值。mode
参数: 指定打开文件的模式,默认为’r'(只读)。openhook
参数: 指定自定义的文件打开钩子函数,用于定制文件打开行为。
- 底层原理:
fileinput
模块内部使用了一个文件对象列表来管理所有的输入源,并提供了一个统一的接口来读取和修改这些输入源的内容。- 当调用
fileinput.input()
函数时,模块会根据传入的参数创建并管理这些文件对象,并提供统一的读写接口。 - 当设置
inplace=True
时,模块会将修改后的内容直接写回到原文件中,并根据backup
参数备份原始文件。
- 使用步骤:
- 导入
fileinput
模块:import fileinput
- 使用
fileinput.input()
函数处理输入文件:- 如果只是读取文件内容,可以直接遍历
fileinput.input()
返回的迭代器:for line in fileinput.input(['file1.txt', 'file2.txt']): print(line.strip())
- 如果需要修改文件内容,可以使用
sys.stdout.write()
将修改后的内容写回:import sys for line in fileinput.input(['file1.txt', 'file2.txt'], inplace=True): if 'old_text' in line: line = line.replace('old_text', 'new_text') sys.stdout.write(line)
- 如果只是读取文件内容,可以直接遍历
- 导入
- 示例代码:
import fileinput # 示例1: 读取多个文件的内容 for line in fileinput.input(['file1.txt', 'file2.txt']): print(f"File: {fileinput.filename()}, Line: {fileinput.lineno()} - {line.strip()}") # 示例2: 修改多个文件的内容,并备份原始文件 import sys for line in fileinput.input(['file1.txt', 'file2.txt'], inplace=True, backup='.bak'): if 'old_text' in line: line = line.replace('old_text', 'new_text') sys.stdout.write(line)
总之,fileinput
模块提供了一个简单而又强大的接口,可以帮助开发者轻松地处理来自多个输入源的数据,无论是读取还是修改。它的底层原理是使用文件对象列表管理输入源,并提供统一的读写接口。使用时只需按照上述步骤即可轻松实现对多个文件的操作。
Linux报 “text file busy”,文件正在被其他进程使用,文件系统问题,文件锁定,程序 Bug, 异常的原因以及解决办法(图文详解1)