首页 > 编程语言 >Python模块fileinput操作文件和目录操作总结

Python模块fileinput操作文件和目录操作总结

时间:2022-12-10 18:31:56浏览次数:63  
标签:文件 Python fileinput input print 操作 line txt

前言

之前介绍Python的 pathlib 模块可以有效的路径及文件查找等方便操作,本篇介绍一个相对 readlines() 获取文件内容更高效的用法

fileinput模块

对一个或者多个文件的内容迭代遍历(类似文件操作的readlines()),但是返回的是​​迭代对象​​,而不是一次性返回所有的文件内容行记录。

1、用法介绍

fileinput.input(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None)
  • • files 是要操作的文件列表,多文件格式为 ['f1.txt', 'f2.txt'],​​默认是标准输入​
  • • inplace 是否将处理的结果​​写回文件​​,默认是不写回
  • • backup 是否开启备份,开启的时候,只需要​​指定备份的扩展名即可​​,如果备份已经存在则会覆盖
  • • mode 读写的模式,默认是只读
  • • encoding 文件编码

2、常用到的函数

  • • fileinput.input() 返回迭代对象,使用for循环读取。可以配合 with 使用
  • • fileinput.filename() 返回当前文件名称
  • • fileinput.lineno() 返回当前已经读取的​​行的数量​​ 注意和 filelineno的区别
  • • fileinput.filelineno() 返回单签读取的行的行号
  • • fileinput.isfirstline() 检查单签行是否是文件的第一行
  • • fileinput.isstdin() 判断​​最后一行​​是否从标准stdin中读取
  • • fileinput.close() 关闭文件,配置with使用的时候,不需要显著关闭

3、案例demo

3.1、 基于标准输入和命令行文件参数

#!/usr/bin/env python
# encoding: utf-8
#

import fileinput

def demo1():
"""演示基于标准输入"""
print("文件名| 文件行号|文件行内容")
for line in fileinput.input():
print(f"{fileinput.filename()}| {fileinput.filelineno()} | {line}")
print(f"文件共有 {fileinput.lineno()} 行")

if __name__ == '__main__':
demo1()

命令行不加任何参数,表示从标准输入 stdin 获取信息

Python模块fileinput操作文件和目录操作总结_fileinput

image-20221209170647696

命令行有参数(文件)则读取文件内容

Python模块fileinput操作文件和目录操作总结_Python_02

image-20221209170923786

3.2、修改多个文件,并​​回写​​ 到源文件

def demo2():
"""
演示多文件操作,并原地修改(写回当前文件)
"""
# 直接传参
# for line in fileinput.input(['fi_1.txt', 'fi_2.txt'], inplace=1):
# 从命令行读取(标准输入)
for line in fileinput.input(inplace=1):
print(line.strip() + ' -> 我是回写')

Python模块fileinput操作文件和目录操作总结_fileinput_03

image-20221209172108029

3.3、文件内容替换,并备份原文件

def demo3():
"""实现源文件的内容替换,并实现备份"""
for line in fileinput.input('1209_demo.txt', backup=".bak", inplace=1):
print(line.rstrip().replace('Python', 'Django'))

执行脚本之后,发现 1209_demo.txt 文件中第一行的​​Python​​ 变成了​​Django​

# python demo_fileinput.py
# cat 1209_demo.txt
hello Django in line one

3.4、利用``fileinput + re` 实现邮箱提取

def demo4():
pattern = "[a-zA-Z0-9]{3,9}@126.com"
for line in fileinput.input("1209_demo.txt"):
if re.search(pattern, line):
print("Email: ", line)

执行脚本之后

# python demo_fileinput.py
Email: lkjdlafje@126.com

Email: ouiolj303@126.com

Demo演示就到这里,通过案例学习它的方法怎么用,然后具体结合自己业务就好。

有问题,欢迎交流 ~


原文地址 [Python模块fileinput操作文件和目录操作总结][1]

标签:文件,Python,fileinput,input,print,操作,line,txt
From: https://blog.51cto.com/colinspace/5927822

相关文章

  • js之操作文件| 12-5
    在HTML表单中,可以上传文件的唯一控件就是​​<inputtype="file">​​。注意:当一个表单包含​​<inputtype="file">​​时,表单的​​enctype​​必须指定为​​multipart/f......
  • C语言操作符
    C语言的操作符分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号操作符、下标引用,函数调用和结构成员。 ​一、......
  • python连接数据库mysql
    前提:电脑已经安装数据库环境1、导入pymysql库2、建立连接:md=pymysql.connect(host='localhost',user='root',password='数据库密码',db='lili')3、新建游标:cur=md......
  • 昨晚停网后,我写了一段Python代码攻破了隔壁老王家的wifi密码
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Python正则表达式
    Python正则表达式情况:在一个EXCEL文件中,记录了众多公司的账目,单位有万元和亿元,彼此混杂。现想把单位统一为万元,且不显示出来法一:利用EXCEL的公式=IF(VALUE(MID(B2,1,......
  • Python之装饰器
    1.装饰器简介python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。简单的说装饰器就是......
  • java操作hadoop之MapReduce
    1.Mapper文件WordCountMapper.javapackagecom.hdfs;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoo......
  • Python爬取世界杯热搜榜,并制作脚本自动发送信息到邮箱
    前言现在正是卡塔尔世界杯激战正酣的时候,每天都有各种各样的新闻。而且,不同的球队,随着比赛的进程,关注的热度也会发生翻天覆地的变化。今天我们就来获取卡塔尔世界的球......
  • 使用JavaWeb进行增删改查操作
    一、基本环境准备1、配置pop.xmlpop文件可以直接复制使用不作修改,也可以根据自己的需求进行增删依赖和插件 1<?xmlversion="1.0"encoding="UTF-8"?>2<project......
  • python保存视频中的每一帧
    importcv2importosdefsave_img():video_path=r'./dataset/sample/video'videos=os.listdir(video_path)forvideo_nameinvideos:file_name=video_name.sp......