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