BraveZhao的个人博客分享 http://blog.sciencenet.cn/u/BraveZhao

博文

Python中fileinput模块使用范例

已有 2443 次阅读 2019-6-12 10:51 |个人分类:Python|系统分类:科研笔记

本文参考自: https://blog.csdn.net/Jerry_1126/article/details/41926407

                     https://www.runoob.com/python/att-string-rstrip.html

1. 利用fileinput循环读取一个文件所有行

>>> import fileinput
>>> for line in fileinput.input('data.txt'):    
              print (line)
import fileinput 
for line in fileinput.input():    
      print (fileinput.filename(),'|','Line Number:',fileinput.lineno(),'|: ',line)

2. 利用fileinput对多文件操作,并原地修改内容

#test.py#---
样本文件-- 1.txt
first
second
样本文件-- 2.txt
third
fourth
import fileinput 
def process(line):    
        return line.rstrip() + ' line'      #rstrip:用来去除结尾字符、空白符
for line in fileinput.input(inplace=1):    
        print process(line)执行命令:python test.py 1.txt 2.txt

3. 利用fileinput实现文件内容替换,并将原文件作备份

#样本文件:#data.txt
Python
Java
C/C++Shell 
#FileName: test.py
import fileinput 
for line in fileinput.input('data.txt',backup='.bak',inplace=1):    
    print line.rstrip().replace('Python','Perl') 
     #或者print line.replace('Python','Perl'),
#最后结果:
#data.txt
Perl
Java
C/C++Shell
#并生成:
#data.txt.bak文件

4. 利用fileinput对文件简单处理

#FileName: test.py
#data.txt
Perl
Java
C/C++

import sys
import fileinput 
for line in fileinput.input(r'C:data.txt'):
    sys.stdout.write('=> ')        print(obj) 其实等价于sys.stdout.write(obj+\n)
    sys.stdout.write(line) 
#输出结果   
=> Perl
=> Java
=> C/C++

5. 利用fileinput批处理文件

#---测试文件: test1.txt test2.txt 
#---脚本文件: test.py
import fileinput
import glob      #glob模块可以使用Unix shell风格的通配符匹配符合特定格式的文件和文件夹
for line in fileinput.input(glob.glob(test*.txt)):    
    if fileinput.isfirstline(): #返回当前读取的行在其文件中是否为第一行      
        print '-'*20, 'Reading %s...' % fileinput.filename(), '-'*20    
    print str(fileinput.lineno()) + ': ' + line.upper() #将line的内容从小写转化为大写 
    #upper() 方法将字符串中的小写字母转为大写字母
    #用法:str.upper()
#---输出结果:>>> 
-------------------- Reading test1.txt... --------------------
1: AAAAA
2: BBBBB
-------------------- Reading test2.txt... --------------------
3: FIRST LINE
4: SECOND LINE


6. 利用fileinput及re做日志分析: 提取所有含日期的行

#--样本文件--
aaa
1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough...
bbb
1970-01-02 10:20:30  Error: **** Due to System Out of Memory...
ccc
#---测试脚本---
import re
import fileinput
import sys

pattern = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
for line in fileinput.input('error.log',backup='.bak',inplace=1):    
    if re.search(pattern,line):
        sys.stdout.write('=>')
        sys.stdout.write(line)
#---测试结果---
=> 1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough...
=> 1970-01-02 10:20:30  Error: **** Due to System Out of Memory...



https://wap.sciencenet.cn/blog-3388193-1184510.html

上一篇:ubuntu 安装 pip
下一篇:Python with用法:自动关闭文件
收藏 IP: 157.0.78.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 04:23

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部