免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 秋天的絮儿
打印 上一主题 下一主题

[文本处理] 原论坛题目升华讨论 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-04-10 11:11 |只看该作者
回复 1# 秋天的絮儿

Python版本
  1. #! /usr/bin/python
  2. import time
  3. import datetime

  4. #

  5. #http://bbs.chinaunix.net/thread-4134337-1-1.html

  6. _file_A=open(r'C:\Users\Administrator\Desktop\python\b\A.lst','r')
  7. _file_B=open(r'C:\Users\Administrator\Desktop\python\b\B.lst','r')

  8. _r_file_A=_file_A.readlines()
  9. _r_file_B=_file_B.readlines()


  10. for _line_B in  _r_file_B:
  11.     _C_time=100000000
  12.     _D_time=0
  13.     _list_B=_line_B.replace('\n','').split()
  14.     _B_time=time.mktime(time.strptime(_list_B[-2]+" "+_list_B[-1], "%Y/%m/%d %H:%M"))
  15.     _list_D=[]
  16.     _list_C=[]
  17.     for _line_A in _r_file_A:
  18.         _list_A=_line_A.replace('\n','').split()

  19.         if _list_B[0]==_list_A[1]:
  20.             _A_time=time.mktime(time.strptime(_list_A[-2]+" "+_list_A[-1], "%Y/%m/%d %H:%M"))

  21.             if _A_time > _B_time and _A_time - _B_time < _C_time :
  22.                     _C_time=_A_time - _B_time
  23.                     _list_C=list(_list_A[-3])
  24.             elif _A_time < _B_time and _B_time - _A_time > _D_time :
  25.                     D_time =_B_time - _A_time
  26.                     _list_D=list(_list_A[-3])

  27.     if _list_C and _list_D :
  28.         l=0
  29.         for x in  range(len(_list_C)):
  30.             if _list_C[x]==_list_D[x]=='x':
  31.                 l+=1
  32.         print _line_B.replace('\n',''),str(l)
  33.     else:
  34.         print  _line_B.replace('\n',''),"*"
复制代码
---------- python ----------
10710  2013/9/6   11:00 2
10711  2013/9/7   12:00 0
10712  2013/9/7  11:00 *

Output completed (0 sec consumed) - Normal Termination


   

论坛徽章:
0
12 [报告]
发表于 2014-04-10 13:17 |只看该作者
本帖最后由 秋天的絮儿 于 2014-04-10 13:23 编辑

回复 4# yestreenstars
  1. [Centos@cctv ~]$ awk 'function f(x,y){split(x,a,"/");split(y,b,":");return mktime(sprintf("%d %02d %02d %02d %02d %02d",a[1],a[2],a[3],b[1],b[2],0))}function g(z){gsub(/[^x]/,0,z);gsub(/x/,1,z);return z}NR==FNR{c[$2][f($6,$7)]=f($6,$7);d[$2][f($6,$7)]=$5;next}{for(i=0;i++<asort(c[$1]);)if(c[$1][i]>=f($2,$3)&&i!=1){s=g(d[$1][c[$1][i-1]])+g(d[$1][c[$1][i]]);print $0,gsub(/2/,0,s);next}print $0,"*"}' 90 91
  2. 10710        2013/9/6        11:00 2
  3. 10711        2013/9/7        12:00 0
  4. 10712        2013/9/7        11:00 *
复制代码
下载完4.0版本并安装成功了,测试脚本没有问题,但真心难懂啊。。
10712        2013/9/7        11:00     能不能只要这个时间点“2013/9/7        11:00”在90文件中没有时间点前或后或没有"10712“这行,就都用*表示?

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
13 [报告]
发表于 2014-04-12 00:29 |只看该作者
星辰写的代码很紧凑啊,逻辑非常清晰,那个二维数组和gsub替换计算法很棒。我写了个,比较长~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP