2016-10-13 4 views
-1

이름과 통계가있는 여러 파일과 특정 통계를 확인하는 파일이 있습니다.이 코드가 작동하지 않는 이유는 무엇입니까

Example File 1 
Eddy,23,2,4,9,AB 
Frank,46,2,4,5,DA 

Example File 2 
AB 
B 
BA 
DA 
DH 

오류는 발생하지 않지만 새 파일에는 쓰지 않습니다.

내가이 일을 사용하고있는 코드는 다음과 같습니다 .CSV 파일을 처리 할 때, csv 모듈을 사용

# Open Removal file and create a set of required removals 
book_removals = open("File2.csv") 
search_removals_col = 0 

# Open the All Candidates file 
book_candidates = open('File1.csv') 
search_candidates_col = 4 

# Create a New Roster file 
book_new = open('upload.csv') 

# Iterate through candidates file, looking for removals 
for row in range(search_candidates_col): 
if book_candidates == book_removals: 
    book_new.write(row) 
    book_new.flush 
book_new.close() 
+0

으로 작성됩니다. 'if'에 대한 들여 쓰기가 홀수로 보입니다. 귀하의 코드가 실제로 그렇게 보이나요? – Michael

+2

'book_new.flush' 대신'book_new.flush()'가되어서는 안됩니까? 또한 파일을 열 때 모드를 지정하지 않으면 기본적으로'read' 모드가됩니다. 파일에 글을 쓰고 싶다면'book_new = open ('upload.csv', 'w')'와 함께 가야합니다. 그리고'book_removals'는 파일 핸들입니다.이 변수와 비교할 때 파일에 무엇이 포함되어 있는지는 알 수 없습니다. – Efferalgan

+2

'book_candidates == book_removals'테스트에서 무엇을 나타낼 것으로 기대합니까? – quamrana

답변

0
import csv 
stats = set() 
with open('File2.csv') as file2: 
    for line in file2: 
     stats.add(line) 
with open('File1.csv', newline='') as file1: 
    file1_reader = csv.reader(file1) 
    with open('output.csv', 'w+', newline='') as output: 
     output_writer = csv.writer(output) 
     for line in file1_reader: 
      if any(item in stats for item in line): 
       output_writer.writerow(line) 

. 이 경우 set이 행의 바깥 쪽이 File2 인 다음 모든 행이 File1이됩니다. 해당 행의 값이 File2이면 해당 행은 output.csv

+0

지연에 대한 회신 사과에 감사드립니다. 당신이 짐작했듯이, 나는 파이썬에 대한 새로운 지식을 가지고 있습니다. 그렇기 때문에 문제의 칼럼에 통계를 설정해야합니까? – user3812645

+0

이 코드를 테스트 해 보았는데 파일 1의 파일 2가 – user3812645

+0

인데도 파일이 여전히 빈 ouput 파일로 돌아오고 있습니다. File1을 열기 전에'print (stats)'를하고 모든 내용이 그 안에 있는지 확인하십시오. –

관련 문제