CSV匹配值python

时间:2014-04-02 05:37:07

标签: python csv

我有一个带字段的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

以上代码完美无缺。 我究竟做错了什么?

2 个答案:

答案 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