2017-01-18 1 views
0

일련의 기후 데이터 텍스트 파일을 읽고 있는데, 각 파일에는 9000 개의 행이 들어 있으며, 첫 번째 행은 이름, 경도 등과 같은 스테이션 정보입니다. 8에서 끝까지의 선은 기후 데이터를 포함합니다.병렬로 두 개의 CSV 파일에 로깅 (파이썬)

모든 파일을 읽고 "MetLocations.csv"및 "MetData.csv"라는 두 파일을 출력하고 싶습니다. 첫 번째 파일은 모든 파일의 첫 번째 줄 모음으로 구성되며 두 번째 파일은 모든 기후 데이터.

모든 파일을 반복하여 정보를 읽고 이상한 점 이외의 문제없이 인쇄했습니다. 'with'루프를 두 번 만들면 MetLocations.csv 파일이 비어있게됩니다. 반면에 루프별로 루프를 만들면 잘 씁니다! 더 명확하게 보려면 코드를 참조하십시오.

이 내 코드의 일부입니다 : 파일 MetLocations.csv가 비어 동안 위의 코드를 실행의 끝에서

with open('MetLocations.csv','wb+') as locations: 
    wr_loc = csv.writer(locations, quoting=csv.QUOTE_NONE, quotechar='', delimiter=',', escapechar='\\') 
    headers = ["St_Id","City","State","Country","Source","WO code","Lat","Long","TimeZone","Alt"] 
    wr_loc.writerow(headers) 
    with open('MetData.csv','a+')as met_data: 
     wr_data = csv.writer(met_data, quoting=csv.QUOTE_NONE, quotechar='', delimiter=',', escapechar='\\',lineterminator='\n') 
     headers = ["St_ID", "Year", "Month", "Day", "Hour", "Minute", "Data Source and Uncertainty Flags", "Dry Bulb Temperature"] 
     wr_data.writerow(headers) 

      for n, f in enumerate(filenames): 
       print n, f,time.strftime('%Y-%m-%d %H:%M:%S') 
       full_path = os.path.join(source, f) 
       with open(full_path, 'r') as input_file: 
        content = input_file.readlines() 
        location = [n] + list_elements(content[0])[1:] 
        wr_loc.writerow(location) 
        meteo = [] 
        for line in content[8:]: 
         meteo.append([n] + list_elements(line)) 
        wr_data.writerows(meteo) 

, 나는 데이터의 전체 파일을 MetData.csv 발견!

이상한 점은 마지막 4 개의 하단 라인이 주석 처리 된 동일한 코드를 실행하면 MetLocations.csv가 문제없이 채워진다는 것입니다.

추가를 위해 두 개의 순차적 CSV 파일을 열 수 있습니까? 또는 내 코드에서 잘못된 부분은 무엇입니까?

많은 도움에 감사드립니다.

+0

http://stackoverflow.com/questions/2323394/zip-alternative-for- iterating-through-two-iterables –

+0

@ Ari Gold, 감사합니다.하지만 언급 한 질문은 글을 쓰는 것이 아니라 병렬로 파일을 읽는 것에 관한 것입니다. –

답변

2

(가) 같은 맥락의 일부가되도록 당신은 같은 라인에있는 모든 파일을 열 필요가 :

with open('MetLocations.csv','wb+') as locations, open('MetData.csv','w')as met_data: 

    wr_loc = csv.writer(locations, 
         quoting=csv.QUOTE_NONE, 
         quotechar='', delimiter=',', escapechar='\\') 

    wr_data = csv.writer(met_data, 
          quoting=csv.QUOTE_NONE, 
          quotechar='', delimiter=',', 
          escapechar='\\',lineterminator='\n') 

    headers = ["St_Id","City","State","Country","Source","WO code","Lat","Long","TimeZone","Alt"] 
    wr_loc.writerow(headers) 

    headers = ["St_ID", "Year", "Month", "Day", "Hour", "Minute", "Data Source and Uncertainty Flags", "Dry Bulb Temperature"] 
    wr_data.writerow(headers) 

    for n, f in enumerate(filenames): 
     print n, f,time.strftime('%Y-%m-%d %H:%M:%S') 
     full_path = os.path.join(source, f) 
     with open(full_path, 'r') as input_file: 
      # your code here 
+0

지금 시도해 보겠습니다. 성공하면 수락으로 표시합니다. 감사합니다. –

+0

아쉽게도 실패합니다! 아직 비어있는 MetLocations.csv –

+0

비워 둘 수 없습니다. 헤더 행이 있어야합니다. 이 코드를 둘러싼 다른 코드가 없다면 말입니다. –

관련 문제