鱼C论坛

 找回密码
 立即注册
查看: 1974|回复: 9

[已解决]格式化数据

[复制链接]
发表于 2017-8-25 16:35:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hackmeng 于 2017-8-25 16:43 编辑

我有一个生成出来的这个格式的文件

  1. 数据库    表      源端       目标端     结果
  2. ------    --      ----       ------     ----
  3. DATA      A        0            0         0
  4. DATA      AABCD    0            0         0
  5. DATA      IUYA     12           12        0
  6. DATA      ADDP     0            0         0
  7. DATA      B        7657         7657      0
  8. DATA      TYUUPT   0            0         0
  9. DATA      CC       887          887       0
  10. DATA      DD       0            0         0
  11. DATA      HIM      0            0         0
  12. DATA      LKINK    0            0         0
复制代码


我想把他格式化成可迭代对象

PS:数据量大约几千行
最佳答案
2017-8-26 18:52:06
hackmeng 发表于 2017-8-26 16:01
我是这样实现的,但我总感觉还有其他更好的方法,各位大佬多多指教

  1. with open("test.txt",'r') as f:
  2.     for line in f:
  3.         if line.split()[-1].isdigit(): #第5列是否为数字
  4.             d3 = int(line.split()[2]) #第3列
  5.             d5 = int(line.split()[-1]) #第5列
  6.             if d5 !=0 :
  7.                 print(d3, '->', d5)

复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-25 18:10:52 | 显示全部楼层
@ba21
帮你召唤大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 18:47:13 | 显示全部楼层
具体要什么效果?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 18:47:31 | 显示全部楼层

过奖。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 14:08:24 | 显示全部楼层
本帖最后由 hackmeng 于 2017-8-26 16:06 编辑
ba21 发表于 2017-8-25 18:47
具体要什么效果?


感谢大佬回复,其实我只想判断最后一列是不是等于0,如果不等于0 就输出第三列和第五列,我的思路是先.join去除多余空格,只留下一个空格,生成列表格式,然后我就 i+=5循环判断最后一列的值,如果不等于0 就直接打印 i 和i-2的值,但数据有点大,大约几千行,不知道大佬有没有其他更简介,更快的方法,我的代码在6楼,请帮忙指正,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 16:01:02 | 显示全部楼层
本帖最后由 hackmeng 于 2017-8-26 16:15 编辑
  1. f=open('test.txt')
  2. fi=f.read()
  3. f.close()
  4. fi=' '.join(fi.split())
  5. files=fi.split()
  6. i=4
  7. while len(files):
  8.     if '---' not in files[i] and 'DIFF' not in files[i] and files[i] !='0':
  9.         print ('表',files[i-3],'对比结果有差异!,差异为:',files[i])
  10.     if (i+5)<len(files):
  11.         i+=5
  12.     else:
  13.         break
复制代码


我是这样实现的,但我总感觉还有其他更好的方法,各位大佬多多指教
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 18:52:06 | 显示全部楼层    本楼为最佳答案   
hackmeng 发表于 2017-8-26 16:01
我是这样实现的,但我总感觉还有其他更好的方法,各位大佬多多指教

  1. with open("test.txt",'r') as f:
  2.     for line in f:
  3.         if line.split()[-1].isdigit(): #第5列是否为数字
  4.             d3 = int(line.split()[2]) #第3列
  5.             d5 = int(line.split()[-1]) #第5列
  6.             if d5 !=0 :
  7.                 print(d3, '->', d5)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 23:28:48 | 显示全部楼层

虽然没看懂你的代码,但还是对我有所帮助,我的代码先判断第五列是不是包含BIFF,然后又判断是不是包含‘---’,而你只是判断他是不是一个数字,很简洁,非常感谢,学习了

我是使用i=4  i+=5的方式判断谁在第5列。我也能看懂你[-1]就是最后一列 [2]是第三列,但我没看懂您是如何划分列的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 23:48:05 From FishC Mobile | 显示全部楼层
line.split()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-26 23:52:51 | 显示全部楼层

非常感谢,学习了,我每个列之间都有不相等数量的空格,看来我还得join一下,去除多余空格了,再次感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 11:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表