首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >不用open函数读取Txt

不用open函数读取Txt

作者头像
用户11754185
发布2025-12-16 18:05:46
发布2025-12-16 18:05:46
820
举报

fileinput模块用于对标准输入或多个文件进行逐行遍历。这个模块的使用非常简单,相比open()方法批量处理文件,fileinput模块可以对文件、行号进行一定的控制。 典型的用法:

代码语言:javascript
复制
import fileinput
 
for line in fileinput.input():
    process(line)

如果代码中没有指定操作的文件对象,则默认是从stdin获得的sys.argv[1:]中的参数。

基本方法
代码语言:javascript
复制
fileinput.input(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)

创建并返回一个FileInput类的实例。files指定要处理的文件,可以是一个多元元组,表示按顺序批量处理元组内文件。inplace参数最关键,可设置是否对源文件进行修改;backup则用于指定对源文件进行备份的后缀名;mode用于指定文件读写方式,和open()方法的定义一样, 默认为只读‘r’。同样的,fileinput.input()方法也可以作为一个上下文管理器使用,如下所示:

代码语言:javascript
复制
with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
    for line in f:
        process(line)

这将保证input会在with语句结束之后被关闭,无论期间是否抛出过异常,确保文件安全。

主要属性 fileinput.filename() 返回当前正在处理的文件名(也就是包含了当前正在处理的文本行的文件) fileinput.fileno() 返回当前文件的总行数。 fileinput.lineno() 返回当前的行数,这个行数是累计的。多个文件的行数会累加起来。 fileinput.filelineno() 返回当前正在处理的文件的当前行数。每次处理完一个文件并开始处理下一个文件时,该值会重置为1,重新开始计数。 fileinput.isfirstline() 当前行是当前文件的第一行时返回True,否则False. fileinput.isstdin() 当前操作对象为sys.stdin时返回True否则False。 fileinput.nextfile() 关闭当前的文件,跳到下一个文件,跳过的行不计数。 fileinput.close() 关闭整个文件链,结束迭代。

示例 现在有一个1.txt文件,内容如下:

代码语言:javascript
复制
愿圣光与你同在!
 
为了部落!
 
兽人永不为奴!
 
你们这是自寻死路!
 
复活吧我的勇士!
 
为你而战我的女士!

然后为每一行添加“#行号”。

代码语言:javascript
复制
import fileinput
 
with fileinput.input(files="d:\\1.txt") as f:
 
    for line in f:
        line = line.rstrip()
        num = fileinput.lineno()
        print("#%d\t%s" % (num, line))
 
#输出结果
#1  愿圣光与你同在!
#2  
#3  为了部落!
#4  
#5  兽人永不为奴!
#6  
#7  你们这是自寻死路!
#8  
#9  复活吧我的勇士!
#10 
#11 为你而战我的女士!

如果你想同步修改源文件,添加inplace=True参数即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档