python - 比较两个 csv 文件并将匹配的条目写入第三个文件 python
问题描述
我在这里看到了很多这样的问题,但没有一个解决方案对我有帮助。假设我们有两个这样的 csv 文件:
文件 1
12345:somevalue:anothervalue
23456:yetanother:onemore
23423:somevalue:anothervalue
41231:somevalue:anothervalue
文件2
12345:desiredvalue:desiredvalue:andonemore
22334:desiredvalue:desiredvalue:andonemore
23456:desiredvalue:desiredvalue:andonemore
32213:desiredvalue:desiredvalue:andonemore
54412:desiredvalue:desiredvalue:andonemore
64123:desiredvalue:desiredvalue:andonemore
期望的结果是这样的:根据file1
我需要获取具有相同起始编号的行file2
并将匹配值写入其中的第一列中的数字file3
,应该如下所示:
12345:desiredvalue:desiredvalue:andonemore
23456:desiredvalue:desiredvalue:andonemore
我试过这样:
with open('file1', 'r', newline='') as file1, open('file2.csv', 'r', newline='') as file2:
reader = csv.reader(file1, delimiter=':')
reader1 = csv.reader(file2, delimiter=':')
for row in reader:
for row1 in reader1:
if row[0] in row1[0]:
with open('file3.csv', "w", encoding='utf-8',newline='') as csv_file:
writer = csv.writer(csv_file, delimiter=':')
writer.writerow(row1)
示例代码工作..部分。我得到的结果只有一行,而有更多匹配项。我错过了什么?
编辑:我找到了 - 我错过break
了第二个for
循环之后:
if row[0] == row1[0]:
writer.writerow(row1)
break
解决方案
您每次都在重写输出文件。将“w”更改为“a+”:
用 open('file3.csv', "a+", encoding....
推荐阅读
- python-3.x - 如何使用序列化器制作对象原始字段的简单列表
- google-cloud-platform - 以增量方式将 Cloud SQL 转换为 BigQuery
- c++ - 在 C++ 中创建 NSApplication
- javascript - 如何禁用后退按钮浏览器
- algorithm - 真实世界路径的数据结构
- ionic-framework - 在 ionic 应用程序中访问 InAppBrowser 的标记
- python - 结束后如何循环此代码以及如何使代码的 Y/N 部分工作?
- python - Python拼接列表在向后工作时不包含第一个元素
- python - 在 Python 中,与大多数语言一样,您使用 0 访问列表中的第一项。但是从 1 开始会是更好的选择吗?
- python - 使用按钮选择中断 For 循环