[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 参考文献

posted @ 2025-07-22 14:40  千千寰宇  阅读(37)  评论(0)    收藏  举报