返回顶部

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='') 

想要读取原文件的真实行号,可以使用 fileinput.filelineno() 方法

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模块只专注于输入(读)

 

posted @ 2022-06-26 15:51  九尾cat  阅读(292)  评论(0编辑  收藏  举报