【问题标题】:PYTHON- Merging CSV file based on same value in colunm 1PYTHON-基于第 1 列中的相同值合并 CSV 文件
【发布时间】:2018-01-08 03:59:40
【问题描述】:

我有 2 个 CSV 文件,每个文件都有数千行,我想将它们合并并输出到一个新文件 (results.csv)。 我在这里查看了其他答案,但现在需要帮助。

请注意: - 两个文件都没有标题 - 我不想使用 PANDA

文件 1 (file.csv) 包含:

041, 2017111, 50501342, 20058987, 200765893, PPP, PLUS, D, NSW

455, 2017082, 50513457, 20068678, 200476768, BBB, LONG, A, NSW

178, 2017976, 50586956, 20089765, 200886565, LLL, PLUS, D, QLD

文件 2 (file2.csv) 包含:

019, 0.000, 20150907, 20170308

041, 0.000, 20160806, 20170504

455、147.533、20140402、20170506

预期(results.csv)输出:

041, 2017111, 50501342, 20058987, 200765893, PPP, PLUS, D, NSW, 0.000, 20160806, 20170504

455, 2017082, 50513457, 20068678, 200476768, BBB, LONG, A, NSW, 147.533, 20140402, 20170506

所以当第1列相同时,代码将排序并加入。

到目前为止,我已经尝试了以下方法,但输出格式错误:

f1 = open(file.csv', 'r')
f2 = open(file2.csv', 'r')
f3 = open('results.csv', 'w')

c1 = csv.reader(f1)
c2 = csv.reader(f2)
c3 = csv.writer(f3)

file2 = list(c2)

for file1_row in c1:
    row = 1
    found = False
    results_row = file1_row  
    for file2_row in file2:        
        x = file2_row[1:]
        if file1_row[0] == file2_row[0]:
            results_row.append(x)
            found = True
            break
    row += 1
    if not found:
        results_row.append('Not found')     
    c3.writerow(results_row)



f1.close()
f2.close()
f3.close()

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 你不需要使用pandassqlite包含在python中。您可以使用 python 和 sqlite 在内存数据库中创建并执行连接。
  • @sKwa 我不熟悉这个所以不是很有帮助-抱歉
  • 它是一个基本的数据库问题(线性代数),没有任何特殊的存储优化(数据结构),暴力是执行它的唯一方法。

标签: python csv merge


【解决方案1】:

你可以使用zip:

import csv
f1 = csv.reader(open('file1.csv'))
f2 = csv.reader(open('file2.csv'))
final_file = csv.writer(open('file_output.csv', 'a'))
final_file.writerows([a+b for a, b in zip(f1, f2)])

【讨论】:

  • 我似乎有一个 MemoryError 与这个 - 有没有更有效的方法?
猜你喜欢
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2020-03-10
  • 2023-03-12
  • 2023-03-13
相关资源
最近更新 更多