Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何合并csv文件中的数据_Python - Fatal编程技术网

Python 如何合并csv文件中的数据

Python 如何合并csv文件中的数据,python,Python,这是它应该做的,但它似乎只是将两个文件合并在一起,我做错了什么?您似乎在添加第三个文件,将第一个和第二个文件合并在一起,这只会使问题复杂化,对您毫无帮助。。在我看来,您需要一个字典,其中每个人的名字都是一个键,与之相关的属性形成一个值列表。这样,如果读取第一个文件时已经存在条目,您只需将附加项附加到该列表中即可 比如: “input_data2.txt” “input_names.txt” John, 12.3, abcd Adam, 1

这是它应该做的,但它似乎只是将两个文件合并在一起,我做错了什么?

您似乎在添加第三个文件,将第一个和第二个文件合并在一起,这只会使问题复杂化,对您毫无帮助。。在我看来,您需要一个字典,其中每个人的名字都是一个键,与之相关的属性形成一个值列表。这样,如果读取第一个文件时已经存在条目,您只需将附加项附加到该列表中即可

比如:

“input_data2.txt”               “input_names.txt”
John, 12.3, abcd                Adam, 121 station road, London
Johnny, 53.3, star              John, Brecon house, Pontypridd
Steve, 33.5, qwer               

Output: “output_merged_data.txt”
Adam, 121 station road, London
John, 12.3, abcd, Brecon house, Pontypridd
Johnny, 53.3, star
Steve, 33.5, qwer

注意:您提供的代码有许多结构和语法错误。。。我在一篇短文里读不完。当您对python中的不同数据类型执行不同的操作时,了解它们是如何工作的可能会对您有所帮助。有很多很棒的网站都有一些小的代码挑战,可以帮助你逐步学习如何做基本的工作,并最终将它们结合起来,得到像这个问题这样更复杂的东西

对不起,第一次“成功”在这里发布。一位朋友试图帮助我,并告诉我如果split_3==:name3=else name3==split_3[0]:正确地说,它会带来语法错误,如果没有这些,它只是合并了两个文件,但不会替换同名的行。看起来它将完成所述的合并数据的任务。然而,即使OP从未提及,使用字典的一个潜在问题是,两个输入文件的顺序都会丢失,合并文件中的名称可能会不同,不再按名称排序,如示例“输入和输出”中所示。@martineau在到达那里之前,他还有一些其他问题要解决。。。不过,通过在写回部分中添加一个围绕names.keys排序的字段,可以很容易地解决字母顺序问题。可以使用集合导入OrderedICT添加保留特定顺序。
“input_data2.txt”               “input_names.txt”
John, 12.3, abcd                Adam, 121 station road, London
Johnny, 53.3, star              John, Brecon house, Pontypridd
Steve, 33.5, qwer               

Output: “output_merged_data.txt”
Adam, 121 station road, London
John, 12.3, abcd, Brecon house, Pontypridd
Johnny, 53.3, star
Steve, 33.5, qwer
names = {}
with open('input_data2.txt', 'r') as f:
    for line in f:
        items = line.split(',')
        name = items[0]  #first element of list
        data = items[1:] #rest of the list
        names[name] = data

with open('input_names.txt','r') as f:
    for line in f:
        items = line.split(',')
        name = items[0]  #first element of list
        data = items[1:] #rest of the list
        if name in names: #if name already exists
            names[name].append(data) #append additional data
        else:
            names[name] = data #create new entry

with open('output_merged_data.txt', 'w') as f:
    for name in names.keys(): #for each entry
        f.write(name + ','.join(names[name])+ '\n') #write a line