如何合并csv文件中的数据

时间:2016-12-05 19:16:13

标签: python

def option2():

    f1 = open("C:\\Users\\notis\\Desktop\\data\\input_data2.txt",'r')
    f1c = f1.read()

    f2 = open("C:\\Users\\notis\\Desktop\\data\\input_names.txt",'r')
    f2c = f2.read()

    f3 = open("C:\\Users\\notis\\Desktop\\data\\output_merged_data.txt",'w') # open in `w` mode to write
    f3.write(f1_contents +'\n'+  f2_contents) # concatenate the contents

    h = open("C:\\Users\\notis\\Desktop\\data\\output_merged_data.txt",'r+')
    hc=h.read()

    for lines in f1:
        for lines in f2:
            split_1 = f1c.split()
            split_2 = f2c.split()
            split_3 = hc.split()
            name1 = split_1[0]
            name2 = split_2[0]
            #if split_3 == '':
                #name3 = ''
            #else name3==split_3[0]:
                #name3 = split_3[0]

        if (name1 != name3 , name2 != name3):
            if name1 == name2:

                index = inputNames.index(',')
                newstr = input2[:-1] + inputNames[index:]
                h.write(newstr)
            else:

                if name1 < name2:
                    h.writelines(input2)
                else:
                    h.writelines(inputNames)

                input2 = f.readline()
                inputNames = g.readline()

从文件夹“data”中读取文件“input_data2.txt”和“input_names.txt”,并创建合并此数据的单个文件 - “output_merged_data.txt”。根据名称(每个输入文件的第一列),创建的文件中的每一行都是唯一的。因此,如果两个输入文件中都存在该名称,则必须合并其余数据

“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

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

1 个答案:

答案 0 :(得分:1)

你似乎正在添加第三个文件(第一个和第二个的连接),这只会让事情变得复杂而根本没有帮助你......我看到你的问题的方式,你需要一个字典,每个人的名字都是一个键,与它们相关的属性形成一个值列表。这样,如果条目已经存在(从读取第一个文件),您只需将其他项目附加到该列表即可。

类似的东西:

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

注意:您提供的代码存在许多结构和语法错误......我可以在短篇文章中查看。当您对它们执行不同的操作时,您可能会阅读python中不同数据类型的行为。有很多很棒的网站都有很小的代码挑战来帮助你逐步学习如何做基础知识,并最终将它们组合在一起以获得更复杂的事情,比如这个问题