本文主要介绍Python中读取文件的几种方法。文章中的样例代码解释的很详细,感兴趣的朋友可以看看。
目录
前言1、方法介绍2、默认读取3、处理a文件4、处理批处理文件5、读取和备份6、重定向和替换7、高级总结。
序言
兄弟们好,今天我们来学习一下fileinput。
说到fileinput,可能90%的码农说他们从来没用过,甚至没听说过。
这并不奇怪,因为在python中,既然open可以接管世界,为什么还需要fileinput呢?
但是,今天我还是要介绍fileinput这个方法,因为它太幼稚了。
不仅仅是熏香。好香啊!
接下来跟着我,fileinput,对,就是这个手感。
1、方法介绍
基本用法
我们先来看看fileinput的基本功能:
Fileinput.filename():返回当前读取的文件名。
—在读取第一行之前返回None。
Fileinput.fileno():返回当前文件的“文件描述符”,用整数表示。
—当文件未打开时(在第一行和文件之间),返回-1。
Fileinput.lineno():返回已读取的累积行号。
—在读取第一行之前返回0。读取最后一个文件的最后一行后,返回该行的行号。
Fileinput.filelineno():返回当前文件中的行号。
—在读取第一行之前返回0。
—读取最后一个文件的最后一行后,返回该行在该文件中的行号。
进阶用法
Fileinput.isfirstline():如果刚刚读取的行是它所在文件的第一行,则返回True,否则返回False。
Fileinput.isstdin():如果最后读取的行来自sys.stdin,则返回True,否则返回False。
Fileinput.nextfile():关闭当前文件,以便下一次迭代从下一个文件(如果存在)读取第一行;未从该文件中读取的行将不会计入累积行数。在读取下一个文件的第一行之前,文件名不会改变。
—在读取第一行之前,此功能不会生效;它不能用于跳过第一个文件。
—读取最后一个文件的最后一行后,该功能将不再有效。
Fileinput.close():关闭序列。
2、 默认读取
代码示例
导入文件输入
'当Python脚本没有传入任何参数时,fileinput默认将stdin作为输入源'
对于fileinput.input()中的行:
打印(f“{ line }”)
运行结果
你输入的东西,程序会再次读取并输出。
俗称:复读机
3、处理一个文件
代码示例
导入文件输入
'文件只需输入打开文件的名称'
使用file input . input(files=(' output . txt ',))作为文件:
对于文件中的行:
print(f ' { file input . filename()} Line { file input . lineno()}:{ Line } ',end=' ')
运行结果
解析:
Fileinput有且只有这两种读取模式:‘R’,‘Rb’;
默认情况下,Fileinput.input()以mode=' r '读取文件。如果你的文件是二进制的,你可以使用mode=' rb '。
4、处理批量文件
多文件序号连续排序
调用方法
fileinput.lineno()方法
代码示例
导入文件输入
'文件只需输入打开文件的名称'
使用file input . input(files=(' output . txt ',' input.txt '))作为文件:
对于文件中的行:
#fileinput.lineno()将两个文件整合成一个文件对象文件,需要排序输出。
print(f ' { file input . filename()} Line { file input . lineno()}:{ Line } ',end=' ')
# fileinput.filelineno()两个文件分别读取,需要分别排序。
print(f ' { file input . filename()} Line { file input . file lineno()}:{ Line } ',end=' ')
运行结果
多文件序号单独排序
调用方法
fileinput.filelineno()方法
代码示例
导入文件输入
'文件只需输入打开文件的名称'
使用file input . input(files=(' test1 . txt ',' test2.txt '))作为文件:
对于文件中的行:
# fileinput.filelineno()两个文件分别读取,需要分别排序。
print(f ' { file input . filename()} Line { file input . file lineno()}:{ Line } ',end=' ')
运行结果
与glob配合用法
在颜值的时代,上面的输出样式,已经无法满足我们的需要了,于是乎,我们就想到了全球。
代码示例
导入文件输入
导入全球
#全球匹配大调音阶的第七音开头的文本文件(文本文件)文件
用于文件输入。投入中的行全球的,全球的.txt ')):
if fileinput.isfirstline():
#输出读取文件
打印('='*10,f '读取文件{fileinput.filename()} ','='*10)
#fileinput.filelineno()方法读取
打印(字符串(文件输入。文件行号())“:”行。upper(),end=“”)
运行结果
就这颜值,哪个小姐姐能不喜欢呢。
5、读取与备份
调用方法
文件输入。输入的支持参数,可以指定备份的后缀名,比如100 . bak
代码示例
导入文件输入
#触发支持的动作,源文件内容被修改,对源文件进行支持
带文件输入。input(files=' test1。txt ',),backup=' .bak ',inplace=1)作为文件:
对于文件中的行:
print(line.rstrip().替换(' 111111 ',' 222222 '))
print(f'{fileinput.filename()}第{fileinput.lineno()}行:{line} ',end=' ')
运行结果
6、重定向替换
解析
上面的例子,用到了原地参数,表示是否将标准输出的结果写回文件,默认不取代。
代码示例:
导入文件输入
#触发支持的动作,源文件内容被修改,对源文件进行支持
使用文件输入。输入(files=(' test 2。txt ',),inplace=True)作为文件:
打印('[信息]任务已开始.')
对于文件中的行:
print(f'{fileinput.filename()}第{fileinput.lineno()}行:{line} ',end=' ')
打印('[信息]任务已关闭.')
运行结果
注
通过运行结果,可以看到:
在为循环体内的打印内容会写回到原文件中了。
而在为循环体外的打印则没有变化。
7、进阶
openhook含义解析
在文件输入。输入()中有一个开放式挂钩的参数,它支持用户传入自定义的对象读取方法;
如果没有传入任何勾子,文件输入默认使用的是打开函数;
方法介绍
文件输入内置了两种勾子
1、fileinput.hook_compressed(文件名,模式)
使用gzip和bz2模块透明地打开gzip和bzip2压缩的文件(通过扩展名。广州和。bz2 '来识别);
如果文件扩展名不是。广州或。bz2 ',文件会以正常方式打开(即使用打开()并且不带任何解压操作);
使用示例:fi=文件输入文件输入(开钩=文件输入。钩子_压缩)
2、文件输入.钩子编码(编码,错误=无)
返回一个通过打开()打开每个文件的钩子,使用给定的编码和错误来读取文件。
使用示例:fi=文件输入文件输入(开钩=文件输入。hook _ encoded(" utf-8 "," surrogateescape "))
示例实战
假如我想要使用文件输入来读取网络上的文件,思路:
先使用要求下载文件到本地
再使用打开去读取它;
def online_open(网址,模式):
导入请求
r=requests.get(url)
filename=url.split('/')[-1]
用打开(文件名,' w ')作为f1:
f1。写(r .内容。解码(' utf-8 '))
f2=打开(文件名,' r ')
返回第二子代
直接将这个函数传给开放式挂钩即可:
# -*-编码:utf-8 -*-
# @时间:2022-07-23
# @作者:卡尔_DJ
导入文件输入
file _ URL=' https://www。csdn。网络/机器人。'文本'
使用文件输入。input(files=(file _ URL,),openhook=online_open)作为文件:
对于文件中的行:
打印(行,结束=' ')
代码整合:
# -*-编码:utf-8 -*-
# @时间:2022-07-23
# @作者:卡尔_DJ
def online_open(网址,模式):
导入请求
r=requests.get(url)
filename=url.split('/')[-1]
用打开(文件名,' w ')作为f1:
f1。写(r .内容。解码(' utf-8 '))
f2=打开(文件名,' r ')
返回第二子代
导入文件输入
file _ URL=' https://www。csdn。网络/机器人。'文本'
使用文件输入。input(files=(file _ URL,),openhook=online_open)作为文件:
对于文件中的行:
打印(行,结束=' ')
运行结果
总结
关于文件输入的介绍,也就介绍到这里。
文件输入本身是对打开函数的再次封装,所以在读取的复写的副本部分,就比打开显得更专业,更优雅,这也是仅限于读取的方面。
在写作方面,与开放相比,它没有那么强。
归根结底,fileinput还是一个不错的方法。你应得的。
关于Python对读取文件的方法的总结,本文到此为止。关于Python的读文件的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。