Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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_Csv - Fatal编程技术网

Python CSV比较列值

Python CSV比较列值,python,csv,Python,Csv,我有两个csv文件,分别是csv1和csv2 csv1 csv2 我想检查csv1第1列到csv2第1列的每个值,如果有匹配项,csv2第2列的另一个值将附加到csv1。 我的最终结果是: 1,9,10,a 2,10,11,b 3,11,10,c 使用python的CSV模块读取文件。 使用for循环比较两个文件,并将结果写入CSV 算法: 使用csv模块读取和写入csv文件。 创建csv文件2的字典结构 以写模式打开新文件。 以读取模式打开csv文件1。 迭代csv文件1中的每一行。 检查

我有两个csv文件,分别是csv1和csv2

csv1

csv2

我想检查csv1第1列到csv2第1列的每个值,如果有匹配项,csv2第2列的另一个值将附加到csv1。 我的最终结果是:

1,9,10,a
2,10,11,b
3,11,10,c

使用python的CSV模块读取文件。

使用for循环比较两个文件,并将结果写入CSV

算法:

使用csv模块读取和写入csv文件。 创建csv文件2的字典结构 以写模式打开新文件。 以读取模式打开csv文件1。 迭代csv文件1中的每一行。 检查字典第2点中是否存在行中的第一项。 如果6为true,则将字典中的值追加到当前行。 将行写入文件。第3点。 代码:

列表附加与连接:


下面应该做您需要做的事情,它使用Python的模块。它首先将整个csv2读入字典,然后在阅读csv1时使用字典查看键是否存在:

它将创建以下output.csv文件:


看到了吗?你们能告诉我们你们到目前为止都做了些什么吗?是的,我们可以在一行中用语句来写,列表的串联比附加要花更多的时间
2,b
1,a
3,c
1,9,10,a
2,10,11,b
3,11,10,c
import csv
# Create Dictionary structure of csv file 2
with open("/home/vivek/2.csv", "rb") as fp:
    root = csv.reader(fp,)
    root2 = {}
    for i in root:
        root2[i[0]] = i[1]

print "Debug 1: Dictionary of file 2:", root2

with open("/home/vivek/output.csv", "wb") as fp:
    with open("/home/vivek/1.csv", "rb") as fp1:
        output = csv.writer(fp, delimiter=",")
        root = csv.reader(fp1,)
        for i in root:
            #Check first item from the row is present in dictionary.  
            if i[0] in root2:
                i.append(root2[i[0]])
            output.writerow(i)
>>> import timeit
>>> def addtest():
...   l = []
...   for i in range(1000): 
...       l +[i]
... 
>>> def appendtest():
...   l = []
...   for i in range(1000): 
...       l.append(i)
... 
>>> print "Time 1:", timeit.timeit('appendtest()', 'from __main__ import appendtest')
Time 1: 110.55152607
>>> print "Time 1:", timeit.timeit('addtest()', 'from __main__ import addtest')
Time 1: 265.882155895
import csv  

d_csv2 = {}

with open('2.csv', 'r') as f_csv2:
    csv_2 = csv.reader(f_csv2)
    for cols in csv_2:
        d_csv2[cols[0]] = cols[1]

with open('1.csv', 'r') as f_csv1, open('output.csv', 'wb') as f_output:
    csv_1 = csv.reader(f_csv1)
    csv_output = csv.writer(f_output)

    for cols in csv_1:
        if cols[0] in d_csv2:
            csv_output.writerow(cols + [d_csv2[cols[0]]])
1,9,10,a
2,10,11,b
3,11,10,c