我有一个带字段的csv文件
joburl, jobtitle,totalviews
我正在尝试分别检索所有jobtitle
的值。到目前为止,我已阅读所有jobtitle
的所有joburl
个,并将唯一的jobtitle
放在单独的文本文件中。现在我想要阅读所有文本文件,将文本文件中的jobtitle
与csv文件中的jobtitle
匹配,然后返回joburl
并查看特定jobtitle
的值}。
代码是:
with open('Pagepath_detail.csv', 'rt') as f:
with open('individual_jobtitle.txt') as title:
for t in title:
job = [row for row in csv.reader(f) if row[1] == t]
print job
其中pagepath_detail
是csv文件,我试图从中提取值。
代码返回一个空数组。但与此同时,如果我尝试直接方法,例如:
with open('Pagepath_detail.csv', 'rt') as f:
job = [row for row in csv.reader(f) if row[1] == 'job1']
print job
以上代码完美无缺。 我究竟做错了什么?
答案 0 :(得分:1)
for t in title
正在遍历文件的行,但也会在每行的末尾返回换行符(\n
)。假设文件是使用print
为每个作业标题创建的,您可能需要做的是修剪作为每个t
的一部分返回的换行符:
with open('Pagepath_detail.csv', 'rt') as f:
with open('individual_jobtitle.txt') as title:
for t in title:
t = t.rstrip() # this line will convert 'job1\n' to 'job1'
job = [row for row in csv.reader(f) if row[1] == t]
print job
请注意,最后一行有时也会为空白,但只有在您的一个或多个名称为空白时才有意义。另外,如果没有空白的最后一行,那么最后一条(非空白)行通常不会在结尾处有换行符。这没关系,因为rstrip
只会悄悄地将线保持原样。
答案 1 :(得分:0)
如果仔细查看代码,那么循环就会出现一个小问题。
您已将循环的位置互换为具体的。尝试下面的代码,它应该适合你。
with open('out.txt','r') as title:
for t in title:
with open('data.csv','r') as iFile:
job = [row for row in csv.reader(iFile) if row[1].lstrip().rstrip() == t.lstrip().rstrip()]
print job