Python之文件读取--fileinput模块
Python之文件读取--fileinput模块
前面使用内置模块open进行文件读取写入操作。学习一个内置模块fileinput进行读取文件。
pen模块功能 有t b r w a 模式,控制文件读写内容的模式: t和b,t和b不能单独使用,必须跟r/w/a连用。
stdin中读入
当Python脚本没有传参时,fileinput默认会以stdin作为输入源
import fileinput
for line in fileinput.input():
print(line)
打开单独的文件
只要在files中指定文件名index.html即可,同时打印文件每行的内容
import fileinput
with fileinput.input(files=('index.html',)) as file:
for line in file:
print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='')
打开多个文件
只要在files中指定多个文件名即可,会按照文件的顺序依次输出文件每行的内容。
import fileinput
with fileinput.input(files=('1.txt', '2.txt')) as file:
for line in file:
print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='')
import fileinput
with fileinput.input(files=('1.txt', '2.txt')) as file:
for line in file:
print(f'{fileinput.filename()} 第{fileinput.filelineno()}行: {line}', end='')
添加glob模块配合使用
import fileinput
import glob
for line in fileinput.input(glob.glob("*.txt")):
if fileinput.isfirstline():
print('-'*20, f'Reading {fileinput.filename()}...', '-'*20)
print(str(fileinput.lineno()) + ': ' + line.upper(), end="")
$ python 1.py
-------------------- Reading 1.txt... --------------------
1: 1
2: 4
-------------------- Reading 2.txt... --------------------
3: 2
4: 3
读取文件,并备份原文件*.bak
import fileinput with fileinput.input(files=("1.txt",), backup=".bak") as file: for line in file: print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='')
#ls
1.txt 1.txt.bak
转换文本格式
将Windows转换为Linux格式 Dos >> unix,可以通过vim或者Linux命令转换,如:iconv和dos2unix。
import sys
import fileinput
for line in fileinput.input(files=('1.txt', ), inplace=True):
if line[-2:] == "\r\n":
line = line + "\n"
sys.stdout.write(line)
open与fileinput关系
fileinput 是对 open 函数的再次封装,在仅需读取数据的场景中, fileinput 显然比 open 做得更专业、更人性。fileinput模块只专注于输入(读)