python学习笔记之

您所在的位置:网站首页 python文件内容比对 python学习笔记之

python学习笔记之

2023-03-20 05:11| 来源: 网络整理| 查看: 265

简介

fileinput是python的标准库,是对open的一个高级封装。可以对一个或者多个文件中的内容进行迭代、遍历等操作;还可以对文档进行格式化输出、查找、替换部分内容等操作。 说明参考官方文档

接口形式

fileinput模块有两种接口使用方式:

函数 fileinput.input(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None) 类 class fileinput.FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None)

常用的接口,函数、类都有这些对应接口,使用起来比较类似

接口 说明 filename() 获取当前文件名称,因为同时可以处理多个文件,所以此函数用处还是比较大 fileno() 返回以整数表示的当前文件“文件描述符” lineno() 返回已被读取的累计行号 filelineno() 返回当前文件中的行号 isfirstline() 如果刚读取的行是其所在文件的第一行则返回 True,否则返回 False isstdin() 如果最后读取的行来自 sys.stdin 则返回 True,否则返回 False nextfile() 关闭当前文件以使下次迭代将从下一个文件(如果存在)读取第一行;不是从该文件读取的行将不会被计入累计行数。 close() 关闭序列。 实例

类、函数形式使用方法类似,这里以函数形式为例说明

读取文件 import fileinput def readFiles(files): with fileinput.input(files=files, mode='r', openhook=fileinput.hook_encoded('utf-8',)) as input: for idx, line in enumerate(input): if input.isfirstline(): print(f"reading file {input.filename()}...") else: print(line, end='')

说明:

files是可以是单个文件名,也可以是多个文件名的集合,如下: files = ('test.h', 'prod.ini') readFiles(files) readFiles('test.h') fileinput模块在python3上好像没有encoding字段了,如果想指定encoding需要使用上面例子中的方式,即钩子函数hook_encoded中指定 修改文件 import fileinput def modifyFile(file): with fileinput.input(files=file, inplace=True, backup='.bak') as f: for line in f: if f.isfirstline(): print('// this is notes test\n' + line, end='') else: print(line, end='')

说明:此例子实现了在第一行之前添加一行注释的功能,当然,还可以实现更复杂的替换功能,可以替换多行、一行中的一部分等,如下替换行中内容"replace text"为"changed text"

def replaceText(files, src, dst): with fileinput.input(files=files, inplace=True, backup='.bak') as f: for line in f: if src in line: print(line.replace(src, dst), end='') else: print(line, end='')

调用方法,如下

# 将test.h中'*c'改成'*data' replaceText('test.h', '*c', '*data')


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3