鱼C论坛

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

[已解决]格式化数据

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

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

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

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

我有一个生成出来的这个格式的文件
数据库    表      源端       目标端     结果
------    --      ----       ------     ----
DATA      A        0            0         0
DATA      AABCD    0            0         0
DATA      IUYA     12           12        0
DATA      ADDP     0            0         0
DATA      B        7657         7657      0
DATA      TYUUPT   0            0         0
DATA      CC       887          887       0
DATA      DD       0            0         0
DATA      HIM      0            0         0
DATA      LKINK    0            0         0

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

PS:数据量大约几千行
最佳答案
2017-8-26 18:52:06
hackmeng 发表于 2017-8-26 16:01
我是这样实现的,但我总感觉还有其他更好的方法,各位大佬多多指教
with open("test.txt",'r') as f:
    for line in f:
        if line.split()[-1].isdigit(): #第5列是否为数字
            d3 = int(line.split()[2]) #第3列
            d5 = int(line.split()[-1]) #第5列
            if d5 !=0 :
                print(d3, '->', d5)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-25 18:10:52 | 显示全部楼层
@ba21
帮你召唤大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 18:47:13 | 显示全部楼层
具体要什么效果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

过奖。。。
想知道小甲鱼最近在做啥?请访问 -> 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楼,请帮忙指正,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我是这样实现的,但我总感觉还有其他更好的方法,各位大佬多多指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 18:52:06 | 显示全部楼层    本楼为最佳答案   
hackmeng 发表于 2017-8-26 16:01
我是这样实现的,但我总感觉还有其他更好的方法,各位大佬多多指教
with open("test.txt",'r') as f:
    for line in f:
        if line.split()[-1].isdigit(): #第5列是否为数字
            d3 = int(line.split()[2]) #第3列
            d5 = int(line.split()[-1]) #第5列
            if d5 !=0 :
                print(d3, '->', d5)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

我是使用i=4  i+=5的方式判断谁在第5列。我也能看懂你[-1]就是最后一列 [2]是第三列,但我没看懂您是如何划分列的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 23:48:05 From FishC Mobile | 显示全部楼层
line.split()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

非常感谢,学习了,我每个列之间都有不相等数量的空格,看来我还得join一下,去除多余空格了,再次感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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