工作中我们经常需要直接修改源文件,当然,我们都被建议最好别在源文件上直接做修改,要做好时刻备份的习惯,特别是重要的配置文件,如果需要直接修改源文件的话,我们一般都是先把源文件读入脚本然后再重定向到目标文件,目标文件重命名,源文件备份,linux下的话使用awk/sed一条命令就能搞定,python中有一个文件处理模块fileinput,比较实用
fileinput
fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作,fileinput原型函数如下:
fileinput.input (files=None, inplace=False, backup=’’, bufsize=0, mode=’r’, openhook=None)
- files: #文件的路径列表,默认是stdin方式,多文件[‘1.txt’,’2.txt’,…]
- inplace: #是否将标准输出的结果写回文件,默认不取代 ,这个参数设为True则直接源文件
- backup: #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖
- bufsize: #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
- mode: #读写模式,默认为只读
- openhook: #该钩子用于控制打开的所有文件,比如说编码方式等;
常用方法
- fileinput.input() #返回能够用于for循环遍历的对象
- fileinput.filename() #返回当前文件的名称
- fileinput.lineno() #返回当前已经读取的行的数量(或者序号)
- fileinput.filelineno() #返回当前读取的行的行号
- fileinput.isfirstline() #检查当前行是否是文件的第一行
- fileinput.isstdin() #判断最后一行是否从stdin中读取
- fileinput.close() #关闭队列
最常用的则为fileinput()方法,该方法按行读入文件,返回一个可迭代对象,使用for循环可遍历输出,这点类似于readline()
修改源文件
1 | def encrypt_passwd(_file): |