gpt4 book ai didi

python - 使用 Python 在 txt 文件中查找 csv 值的问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:40 24 4
gpt4 key购买 nike

我是 Stackoverflow 的新手,也是 Python 的新手。我曾尝试在网站上搜索此问题的答案,但没有找到与 csv 和 txt 文件之间的匹配值相关的答案。

我正在编写一个简单的 Python 脚本,它从大型 csv 文件(~600k 行)中读取一行,从该行中获取一个值,分配给一个变量,然后使用该变量尝试从中找到匹配值一个大的 txt 文件(~1.8MM 行)。它不起作用,我不确定为什么。

这是 source.csv 文件的一个片段:

DocNo,Title,DOI
1,"Title One",10.1080/02724634.2016.1269539
2,"Title Two",10.1002/2015ja021888
3,"Title Three",10.1016/j.palaeo.2016.09.019

这是 lookup.txt 文件的一个片段(请注意,它由 \t 分隔):

DOI 10.1016/j.palaeo.2016.09.019    M   First
DOI 10.1016/j.radmeas.2015.12.002 M First
DOI 10.1097/SCS.0000000000002859 M First

这是有问题的代码:

import csv

with open('source.csv', newline='', encoding = "ISO-8859-1") as f, open('lookup.txt', 'r') as i:
reader = csv.reader(f, dialect='excel')

counter = 0

for line in i:
for row in reader:
doi = row[2]
doi = str(doi) # I think this might actually be redundant...

if doi in line:
# This will eventually do more interesting things, but right now it's just a test
print(doi)
break
else:
# This will be removed--is also just a test (so I can watch progress)
print(counter)
counter += 1

目前,当它运行时,它只计算行数,即使每个文件中都有一个匹配的 doi

令人抓狂的是,当我给 doi 一个硬编码值时,它会按预期执行。这让我觉得要么 doi 中的斜线以某种方式破坏了东西,要么我需要转换 doi 变量的数据类型。

例如,这个有效:

doi = "10.1016/j.palaeo.2016.09.019" 

for line in i:
if doi in line:
print(doi)
break
else:
print(counter)
counter += 1

在此先感谢您的帮助,我已经无计可施了!

最佳答案

你的问题是重复 for line in i: 不会在每个循环中从头开始,而是继续从你调用 break 时的位置开始最后一次。如果查找文件 i 中有任何行没有匹配项,您将有效地完整地遍历查找文件,然后对 for line in i: 的所有调用都会执行什么都没有(空循环)。

作为第一步,您可能希望将查找行保存在列表中。下一步可能是通过解析行将其变成查找字典。

下面是一个演示:

!cat 1.txt
row1
row2
row3

!cat 2.txt
row A
row B
row C

with open('1.txt', 'r') as i, open('2.txt', 'r') as j:
for irow in i:
print "irow", irow.strip()
for jrow in j:
print "jrow", jrow.strip()

irow row1
jrow row A
jrow row B
jrow row C
irow row2
irow row3

关于python - 使用 Python 在 txt 文件中查找 csv 值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com