基于第1列合并行的Python脚本

基于第1列合并行的Python脚本,python,csv,sorting,merge,Python,Csv,Sorting,Merge,我已经看到了很多关于这个问题的问题/答案,但我所看到的没有一个解决了我的问题,因此任何帮助都将不胜感激 我有一个非常大的CSV文件,其中有一些重复的列条目,但我希望有一个脚本来匹配和合并基于第一列的行。 (我不想使用熊猫。我使用的是Python 2.7。文件中没有CSV头) 这是输入: 2144, 2016, 505, 20005, 2007, PP, GPP, DAC, UNSW 8432, 2015, 505, 20005, 2041, LL, GLO, X2, UNSW 0055, 0.

我已经看到了很多关于这个问题的问题/答案,但我所看到的没有一个解决了我的问题,因此任何帮助都将不胜感激

我有一个非常大的CSV文件,其中有一些重复的列条目,但我希望有一个脚本来匹配和合并基于第一列的行。 (我不想使用熊猫。我使用的是Python 2.7。文件中没有CSV头)

这是输入:

2144, 2016, 505, 20005, 2007, PP, GPP, DAC, UNSW 
8432, 2015, 505, 20005, 2041, LL, GLO, X2, UNSW
0055, 0.00, 0.00, 2014, 2017
2144, 0.00, 0.00, 2016, 959
8432, 22.9, 0.00, 2015, 2018 
0055, 2014, 505, 20004, 2037, LL, GLO, X2, QAL
想要的输出:

2144, 0.00, 0.00, 2016, 959, 2016, 505, 20005, 2007, PP, GPP, DAC, UNSW  
0055, 0.00, 0.00, 2014, 2017, 2014, 505, 20004, 2037, LL, GLO, X2, QAL   
8432, 22.9, 0.00, 2015, 2018, 2015, 505, 20005, 2041, LL, GLO, X2, UNSW
我试过:

reader = csv.reader(open('input.csv))
result = {}

for row in reader:
    idx = row[0]
    values = row[1:]
    if idx in result:
        result[idx] = [result[idx][i] or v for i, v in enumerate(values)]
    else:
        result[idx] = values
此选项用于搜索重复项:

with open('1.csv','r') as in_file, open('2.csv','w') as out_file:
    seen = set() # set for fast O(1) amortized lookup
    for line in in_file:
        if line in seen: continue
但是这些对我没有帮助——我迷路了

任何帮助都会很好


谢谢

尝试使用字典,第一列的值作为键。我会这样做:

with open('myfile.csv') as csvfile:
    reader = list(csv.reader(csvfile, skipinitialspace=True))  # remove the spaces after the commas
    result = {}  # or collections.OrderedDict() if the output order is important
    for row in reader:
        if row[0] in result:
            result[row[0]].extend(row[1:])  # do not include the key again
        else:
            result[row[0]] = row

    # result.values() returns your wanted output, for example :
    for row in result.values():
        print(', '.join(row))

谢谢你,天空。我在上面编辑过。我迷路了,不知道从哪里开始谢谢你。我希望这能奏效。我犯了以下错误。“如果结果:索引器中的行[0]列表索引超出范围”不确定原因?有什么想法吗?再次感谢,我认为让它
reader=list(csv.reader(csvfile,skipinitialspace=True))
应该可以工作。谢谢-不幸的是,现在它需要一些时间,然后返回一个内存错误。错误是什么?文件有多大?我猜这个文件太大,无法放入内存。如果是这样的话,您将需要按照类似的步骤分块将新输出写入文件。错误为“reader=list(csv.reader(csvfile,skipinitialspace=True))MemoryError”。是,文件大小为1411035 KB。类似这样的东西…chunk,chunksize=[],100 def进程\u chunk(chuck):打印len(chuck)??谢谢