python学习笔记之 |
您所在的位置:网站首页 › python文件内容比对 › python学习笔记之 |
简介
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 |