2011-04-22 1 views
0

주어진 디렉토리에서 여러 csv 파일을 처리하려고합니다. 스크립트를 실행할 때마다 디렉토리의 각 파일 (새 파일을 추가 한 경우)을 검사 한 다음 데이터베이스가 다시 처리되어 파일이 처리되었는지 확인하고, 그렇다면 처리를 시작할 줄을 지정합니다 에서.Python을 사용하여 데이터베이스를 확인하는 동안 디렉토리의 파일을 반복하는 중 문제가 발생했습니다.

문제는 상태가 무엇인지에 관계없이 스크립트가 데이터베이스 테이블에 나열한 파일을 건너 뛰는 것 같습니다. 나는 명백한 것을 놓치고있는 것이 틀림 없다. 그러나 나의 테스트가 잘못되어 가고있는 부분을 함께 모을 수는 없다.

file_processed_id | file_type | file_name | file_line | file_lines_processed | file_lines_skipped | file_status 

여기에 관련 코드입니다 : 여기

테이블의 구조이다

for filename in os.listdir(path): 
    status = check_process_status(filename,conn) 
    if status != None: 
     if status[7] == 'completed': 
      pass 
     else: 
      start_line = status[3] 
      file_to_processed = filename 
      break 
    else: 
     start_line = 0 
     file_to_be_processed = filename 

그리고 여기에 DB를 확인하는 기능입니다 :

def check_process_status(f,conn): 

    # retrieve process status of file 

    cursor = conn.cursor() 

    cursor.execute("""SELECT * 
       FROM files_processed 
       WHERE file_type = 'faca' 
       AND file_name = %s 
       """,(f,)) 

    row = cursor.fetchone() 
    if row == None: 
     return None # if no entry, returns null 
    else: 
     return row # returns row information 

제가 테스트 한 db connection 및 모든 것을 포함하며, 파일이 실제로 테이블에 존재하면 행 정보를 반환합니다. 필자가 얻지 못하는 이유는 "file_status"필드가 설정 되더라도 스크립트를 실행할 때마다 다음 파일로 건너 뛰는 이유입니다.

의견이 있으십니까?

+2

루프에 '휴식'이있는 이유는 무엇입니까? –

+0

글쎄, 난 아마 뭔가 끔찍한 기본,하지만이 루프는 csv 파일을 통해주기 루프 별도로 처리되지 않은, 그래서 내가 처리되지 않은 파일을 찾으면 변수를 설정하고 밖으로 나올 필요가있다. 루프의 – tchaymore

+3

'break'에 도달하면 다른 파일을 처리하지 않습니다. 'break '로 이어지는 모든 파일을 건너 뛰는 것처럼 보일 것입니다. 그게 네가 원하는거야? 그렇다면 질문이 혼란 스럽습니다. –

답변

2

귀하의 의견을 바탕으로 file_to_be_processed = filename 뒤에 else 절에 break 조항이 포함되어 있지 않습니까?

이 변수의 이름은 위의 몇 줄에 file_to_processed으로 잘못 표시됩니다.

또한 테이블에 7 개의 필드 만 있기 때문에 status[7]은 예외를 throw합니다. 나는 status[6]이어야한다고 생각합니다.

관련 문제