免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2683 | 回复: 4
打印 上一主题 下一主题

求教python文本处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-16 00:21 |只看该作者 |倒序浏览
已知文件
A   1    3
A   4    5
B   2    3
B   4    6
B   8    9


得出
A  1    5
B   2    6
B   8    9
的脚本

文件行数会比较多,将数字连续的整合

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2014-03-16 11:50 |只看该作者
清楚的解释下规则,别人不一定看懂你的例子。

论坛徽章:
0
3 [报告]
发表于 2014-03-16 22:03 |只看该作者
对于相同的元素A,如果第二行的第一个数字是第一行的第二个数字的值+1,即可以实现连续

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
4 [报告]
发表于 2014-03-17 09:28 |只看该作者
回复 3# sullybear


    还是没看懂呀。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
5 [报告]
发表于 2014-03-17 11:06 |只看该作者
回复 3# sullybear
但愿我看明白了。generator实现,不管文件有多大,占用很少内存。
  1. import io

  2. infile = io.StringIO(
  3. '''A   1    3
  4. A   4    5
  5. B   2    3
  6. B   4    6
  7. B   8    9
  8. ''')

  9. def parse(fp):
  10.     for line in fp:
  11.         fields = line.split()
  12.         if len(fields) == 3 and fields[1].isdigit() and fields[2].isdigit():
  13.             fields[1], fields[2] = int(fields[1]), int(fields[2])
  14.             yield fields

  15. def merge(records):
  16.     value = next(records, None)
  17.     if value is None:
  18.         return

  19.     for e in records:
  20.         if value[0] == e[0] and value[2] + 1 == e[1]:
  21.             value[2] = e[2]
  22.         else:
  23.             yield value
  24.             value = e
  25.     yield value

  26. def main():
  27.     for e in merge(parse(infile)):
  28.         print(*e)

  29. if __name__ == '__main__':
  30.     main()
复制代码
保存为main.py,执行:
  1. bash-3.2 $python --version
  2. Python 3.3.4
  3. bash-3.2 $python main.py
  4. A 1 5
  5. B 2 6
  6. B 8 9
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP