python--用linecache模块方便提取文本数据

来源:互联网 发布:网络主播歌手上好声音 编辑:程序博客网 时间:2024/05/19 23:24
需求:

工作中生成的日志是固定格式的大量数据,需要从每个日志中提取固定的几行值,对其汇总,用于统计分析工艺参数。

需要日志内容如图:

 

解决:

python自带的linecache模块中getline方法简单好用,可直接提取文件中对应行的内容

 

  1. #!/usr/bin/python 
  2. # -*- coding: UTF-8 -*- 
  3. #data_filter 
  4.  
  5. import os,sys,linecache 
  6. info = os.getcwd() 
  7. fout = open('data_filter.txt_''w'
  8.  
  9.  
  10. def writeintofile(info): 
  11.     fin = open(info) 
  12.     need ='' 
  13.     for lineno in range(360,363):  #需要每个日志的360行至363行内容
  14.         need_temp = linecache.getline(info,lineno) #提取对应行内容
  15.         need += need_temp 
  16.     data = need + info +'\n' 
  17.     strinfo = data 
  18.     fout.write(strinfo) 
  19.     fin.close() 
  20.  
  21. for root, dirs, files in os.walk(info): 
  22.     if len(dirs) == 0
  23.         for fl in files: 
  24.             info = "%s\%s" % (root,fl) 
  25.             if info[-3:]=='txt':  #遍历所有txt文本,即所需日志
  26.                 writeintofile(info) 
  27. fout.close() 
  28.  
  29. raw_input('Finished....Write BY Tom \nEnter Exit' ) 

 

由于os.walk默认是按日志文件名顺序遍历的,这里需要按日志生成时间提取内容,所以引入os.path.getmtime()方法,将文件创建时间做key,文件名做value定义个字典,将key排序后,输出value。做以下修改,不知道是否有更好方法

 

  1. #!/usr/bin/python 
  2. # -*- coding: UTF-8 -*- 
  3. #data_filter 
  4.  
  5. import os,sys,linecache 
  6. info = os.getcwd() 
  7. fout = open('data_filter.txt_''w'
  8.  
  9.  
  10.  
  11. d = {}      #struct a dictionary save file_time as a key,and filename as a value 
  12.  
  13. for root, dirs, files in os.walk(info): 
  14.     for file in files: 
  15.         file_time = os.path.getmtime(file) 
  16.         d[file_time] =file 
  17.  
  18. def writeintofile(info): 
  19.     fin = open(info) 
  20.     need ='' 
  21.     for lineno in range(360,363): 
  22.         need_temp = linecache.getline(info,lineno) 
  23.         need += need_temp 
  24.     data = need + info +'\n' 
  25.     strinfo = data 
  26.     fout.write(strinfo) 
  27.     fin.close() 
  28.  
  29.      
  30. L = d.keys() 
  31. L.sort()  #时间排序
  32. for file_time in L: 
  33.     #print d[file_time]         # for test 
  34.     if d[file_time][-3:] =='txt'
  35.         writeintofile(d[file_time])
  36.  
  37. fout.close() 
  38.  
  39. raw_input('Finished....Write BY Tom \nEnter Exit' )
0 0
原创粉丝点击