Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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文件,大约400000行,如: 54.10,14.20,34.11 52.10,22.20,22.11 49.20,17.30,29.11 48.40,22.50,58.11 51.30,19.40,13.11 第二列大约250000行,第三列有更新的数据-第一列和第二列是更新的参考: 52.10,22.20,22.15 49.20,17.30,29.15 48.40,22.50,58.15 我想构建第三个文件,如: 54.10,14.20,34.11 52.10,22.2

我有相当大的csv文件,大约400000行,如:

54.10,14.20,34.11
52.10,22.20,22.11
49.20,17.30,29.11
48.40,22.50,58.11
51.30,19.40,13.11
第二列大约250000行,第三列有更新的数据-第一列和第二列是更新的参考:

52.10,22.20,22.15
49.20,17.30,29.15
48.40,22.50,58.15
我想构建第三个文件,如:

54.10,14.20,34.11
52.10,22.20,22.15
49.20,17.30,29.15
48.40,22.50,58.15
51.30,19.40,13.11

它必须包含第一个文件中的所有数据,但第三列的值取自第二个文件的行除外。

建议您查看熊猫。你应该能够做你想做的事,它还将处理从CSV读取的数据(创建一个你要合并的数据框)

建议你看看熊猫。您应该能够做您想做的事情,它还将处理从CSV读取的数据(创建一个您将合并的数据帧)

一个stdlib解决方案,只需;第二个文件被读入内存(字典):

第一个
with
语句打开第二个文件,并在前两列上建立一个键控字典。假定这些在文件中是唯一的


然后,第二个块打开第一个文件进行读取,输出文件进行写入,并将输入文件中的每一行写入输出文件,用更新版本替换
更新
字典中的任何行。

一个只有;第二个文件被读入内存(字典):

第一个
with
语句打开第二个文件,并在前两列上建立一个键控字典。假定这些在文件中是唯一的


然后,第二个块打开第一个文件进行读取,输出文件进行写入,并将输入文件中的每一行写入输出文件,用更新的版本替换
更新
字典中的任何行。

我得到了TypeError:unhable type:'list'对不起,一切都很好,我相信是我的错误。谢谢你的帮助。我收到了打字错误:不可损坏的字体:“列表”对不起,一切都很好,我相信是我的错误。谢谢你的帮助。
import csv

with open('file2.csv', 'rb') as updates_fh:
    updates = {tuple(r[:2]): r for r in csv.reader(updates_fh)}

with open('file1.csv', 'rb') as infh, open('output.csv', 'wb') as outfh:
    writer = csv.writer(outfh)
    writer.writerows((updates.get(tuple(r[:2]), r) for r in csv.reader(infh)))