【问题标题】:Copy, combine certain columns in CSVs and output to a new file复制、组合 CSV 中的某些列并输出到新文件
【发布时间】:2015-01-30 14:43:22
【问题描述】:

我有 csv 文件 a.txtb.txt(没有标题,制表符分隔),每个文件有 6 列和大约 200,000 行,并且每个文件中的行号始终相同,我要做的是:

  • a.txt的前4列复制>输出到一个新文件c.txt

  • a.txt 中获取5 col +b.txt 中获取5 col > 输出到5 col c.txt

  • a.txt 中获取6 col +b.txt 中获取6 col > 输出到6 col c.txt

a.txt 的示例

B sub   19  20  IG_BSU00010     4   1
B sub   22  23  IG_BSU00010     0   0
B sub   35  36  IG_BSU00010     0   0
B sub   55  56  IG_BSU00010     0   0

b.txt 的示例

B sub   19  20  IG_BSU00010     0   2
B sub   22  23  IG_BSU00010     0   0
B sub   35  36  IG_BSU00010     0   0
B sub   55  56  IG_BSU00010     1   0

谢谢。

【问题讨论】:

    标签: python python-2.7 csv


    【解决方案1】:

    KISS 解决方案,

    1. 打开我们需要的所有文件,
    2. 永远循环,从 a 读取一行,测试 EOF 并可能爆发
    3. 也从b读取,拆分行,更新la中的最后两项,输出连接的元素并写入换行符

    .

    a = open('a.csv')
    b = open('b.csv')
    c = open('c.csv','w')
    
    while True:
       la = a.readline()
       if not la: break
       lb = b.readline()
       la = la.split('\t')
       lb = lb.split('\t')
       la[4] = str(int(la[4])+int(lb[4]))
       la[5] = str(int(la[5])+int(lb[5]))
       c.write('\t'.join(la)); c.write('\n')
    

    【讨论】:

      【解决方案2】:

      你可以这样做

      target_file = open('a.txt','r')
      data_from_a_file = target_file.readlines()
      

      然后你可以用空格分割每一行

      formatted_data = [line.split(' ') for line in data_from_a_file]
      

      formatted_data 中,您将获得列表,其中文件的每一行都将显示为单独的列表,例如[['sub', '19', '20'], ['other', 'values']] 。 然后您可以像formatted_data[1][5] 一样轻松访问它 - 这将为您提供第二行的第 6 个值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-11
        • 2014-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        相关资源
        最近更新 更多