2014-04-02 3 views
1

는 내가 모든 jobtitle의 별도의 값을 검색하기 위해 노력하고 필드CSV 매칭 값 파이썬

joburl, jobtitle,totalviews 

있는 CSV 파일이 있습니다. 지금까지 나는 joburl의 모든 jobtitle을 읽고 별개의 텍스트 파일에 고유 한 jobtitle을 넣습니다. 이제 모든 텍스트 파일을 읽고 텍스트 파일의 jobtitle을 CSV 파일의 jobtitle과 일치시키고 joburl을 반환하고 특정 jobtitle의 값을 봅니다. 코드는 다음과 같습니다

pagepath_detail 내가에서 값을 추출하기 위해 노력하고있어 csv 파일이
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 

. 코드에서 빈 배열을 반환합니다.

with open('Pagepath_detail.csv', 'rt') as f: 
job = [row for row in csv.reader(f) if row[1] == 'job1'] 
print job 

위의 코드가 완벽하게 작동 : 그러나 동시에, 나는 같은 직접적인 접근을 시도하는 경우. 내가 뭘 잘못하고 있니?

답변

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 
1

for t in title은 파일의 행을 반복하면서 각 행의 끝에 개행 문자 (\n)를 반환합니다. 뿐만 아니라 마지막 줄은 때때로 빈 될 것

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 

주 : 파일이 각 jobtitle에 대한 print을 사용하여 만든 것으로 가정하면, 무엇을 당신이 뉴 라인을 트림하는 것입니다해야 할 수는 t 각각의 일부로 반환 하지만 그 중 하나 이상이 비어있는 경우에만 문제가됩니다. 또한 빈 최종 행이없는 경우 마지막 (비 공백) 행에는 대개 마지막에 개행이 없습니다. rstrip은 조용히 줄을 그대로 반환하기 때문에 괜찮습니다.

+0

제안 해 주셔서 감사하지만 job1의 값만 반환했지만 나머지는 공백으로 반환됩니다. –

+0

'individual_jobtitle.txt'의 내용의 예를 보여줄 수 있습니까? 이 답변에 설명 된 것처럼 줄 바꿈으로 구분 된 목록입니까, 아니면 다른 서식이 적용되어 있습니까? –