python结合两个文件,数据不一致

时间:2017-05-15 02:41:39

标签: python csv combiners

现在我有两个文件:A和B.两个都是csv文件。

csv A有一些数据:

a b c 
1 2 3
4 5 6 
7 8 9
.....

csv B有一些数据:

b d
7 0
8 3
2 1
.....

现在我想将两个csv文件A和B组合成一个新文件C:

a b c d
1 2 3 1
7 8 9 3
......

首先我必须用csv.reader读取文件,代码是这样的:


    def open_func(file_name):
    open_dict={}
    key_list=[]
    fd=csv.reader(open(file_name,'r'))
    j=1
    for line in fd:
        data_len=len(line)
        if not j:
            try:
                for i in range(data_len):
                    open_dict[key_list[i]].append(line[i])
            except:
                #print line 
                continue            
        else:  
            for i in range(data_len):
                key=line[i]
                key_list.append(key)
            for i in range(data_len):
                open_dict[key_list[data_len-i-1]]=[]
            j=0
            continue
    return open_dict


我使用dict来阅读它们,如果它相等,我想键入组合

但我不知道该怎么做

注意:数据超过一百万行。

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用pandas来执行此操作,它为Python提供了高性能,易于使用的数据结构和数据分析工具。所以你可以尝试处理大数据。

e.g。

>>> import pandas as pd
>>> f1 = pd.DataFrame({'a':[1,4,7], 'b':[2,5,8], 'c':[3,6,9]})
>>> f2 = pd.DataFrame({'b':[7,8,2], 'd':[0,3,1]})
>>> f = f1.merge(f2, how='left', on='b')
>>> f
   a  b  c    d
0  1  2  3  1.0
1  4  5  6  NaN
2  7  8  9  3.0

或从csv中读取文件:

f1 = pd.read_csv('1.csv',sep="\s+")
f2 = pd.read_csv('2.csv',sep="\s+")

你可以把它写到文件中:

f.to_csv('out.csv', index=False)

out.csv:

a,b,c,d
1,2,3,1.0
4,5,6,
7,8,9,3.0

答案 1 :(得分:0)

pandas.read_csv让这相当容易:

<强>代码:

import pandas as pd

df1 = pd.read_csv('file1', sep='\s+')
df2 = pd.read_csv('file2', sep='\s+')

df = df1.merge(df2, on=['b'])
print(df)

<强>结果:

   a  b  c  d
0  1  2  3  1
1  7  8  9  3