匹配2个csv文件并写入第二个文件的第三个单元格

野比

我编写了这段代码来比较两个CSV files (f1 and f2)都有3列和许多行的两个代码,然后分别将f1的anitem at cell 1 of f1 matches that of f2item at cell 2 of f1 matches that of f2, it should write the valuescell1,f1的cell2和f2的cell 3分别与一个名为的文件进行比较network_python.csv

编码:

t = {}
with open('file1.csv') as ff:
    for f1 in csv.DictReader(ff):
        with open('file2.csv') as ff:
            for f2 in csv.DictReader(ff):
                if int(f1['From'].strip()) == int(f2['From'].strip()) and int(f1['To'].strip()) == int(f2['To'].strip()):
                    print (f1['From'], f1['To'], f2['Mode'])
                    t.update({'From': f1['From'], 'To': f1['To'], 'Mode': f2['Mode']})

with open('network_python.csv', 'w') as csvfile:
    fieldnames = ['From', 'To', 'Mode']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for k,v in t.iteritems():
        writer.writerow(t)

file1.csv中的样本数据

From    To  Mode
1   2   cw
2   1   cw
3   4   cwt
7   2   cbt
8   9   ct

file2.csv中的样本数据

From    To  Mode
8   9   c
3   4   cw
1   2   cwt
7   2   ct
2   1   cb

该代码可以正常工作(即获得正确的输出),但是在写入文件时,它会写入一行,从而覆盖先前的结果。还有没有办法可以提高代码的效率?因为使用大文件速度很慢。我在这里搜索了一些问题,但它们并没有完全回答我的问题。谢谢您的宝贵时间

沉默的

您可以从两个csv文件创建一个dictwhere密钥(from, to),然后将它们组合在一起以得到结果:

import csv
from collections import OrderedDict

with open('file1.csv') as f:
    reader = csv.reader(f)
    reader.next()
    rows = OrderedDict((tuple(row[:2]), None) for row in reader)

with open('file2.csv') as f:
    reader = csv.reader(f)
    reader.next()

    # Skip row if matching row wasn't present in file1.csv
    rows.update({tuple(row[:2]): row[2] for row in reader if tuple(row[:2]) in rows})

with open('network_python.csv', 'wb') as csvfile:
    fieldnames = ['From', 'To', 'Mode']
    writer = csv.writer(csvfile)
    writer.writerow(fieldnames)

    # Skip row if it wasn't present in file2.csv
    writer.writerows((k[0], k[1], v) for k, v in rows.iteritems() if v is not None)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果两个单元格匹配,则从第三个单元格返回值

提取R中第二个和第三个下划线之间的值

提取第二个和第三个下划线之间的字符串

强制第二个div出现在html的第三个div下

如何使用plotly在散点图中显示第三个变量的第二个图例?

给定一个CSV文件,如何删除每行第二个和第三个选项卡之间的内容?

通过排除第二个和第三个文件中的标头,将三个文件合并到一个主文件中

如果第二个参数为空,则函数调用,第三个参数为第二个参数?

从第二个和第三个表中获取与第一个表中的匹配值相对应的值

jQuery:成功后的回调可以是第二个或第三个参数?

Node js在第二个或第三个调用上工作

从第一个文件中搜索第二个文件,然后输出到python中的第三个文件

Dropdownlist无法获取第二个和第三个列表项的值

选择第二个或第三个对象/元素

在android studio中的第二个活动中打开第三个活动

将第三个单词与第二个单词的开头对齐20个空格

如何使第二个活动中的按钮打开第三个活动?

从SQL查询中获取第一个/第二个/第三个元素

使用beautifulsoup在BeautifuSoup中获得第二个和第三个孩子

UITableView第二和第三个标签在单元格中不显示值

Excel VBA:迭代代码,但需要DIV类的第二个或第三个实例

第三个选项卡接收赋予第二个选项卡的值

我无法创建新文件夹并在我的第二个和第三个分区中粘贴任何内容

填充第二个或第三个文件(bash)中的缺失值

根据第二个列表框选择生成第三个列表框的选项

删除第二个和第三个冒号之间的文本

PHP:将表单数据传递给第三个文件而不在第二个文件中更改它

将多个文本框合并到一个单元格中,如果第二个,第三个没有值,如何...文本框然后继续代码

在 Excel 中查找第二个和第三个匹配值