2017-01-18 8 views
0

気候データのテキストファイルを読んでいます。各ファイルには9000行、最初の行には名前、経度などの情報が入っています。 8から最後の行には気候データが含まれています。並行して2つのCSVファイルにログする(Python)

「MetLocations.csv」と「MetData.csv」という2つのファイルをすべて読み込み、最初のファイルはすべてのファイルの最初の行のコレクションで構成され、2番目のファイルはすべての気候データ。

私はすべてのファイルをループして情報を読んで、奇妙な問題を除いて問題なく印刷しました。私はループで二重にすると、ファイル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が問題なく埋められます。

追加する連続した2つの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

私は今それを試してみましょう、成功した場合、私はAcceptedとしてマークします。ありがとう –

+0

残念ながら、それはまた失敗します! MetLocations.csvはまだ空白です –

+0

空白にすることはできません。ヘッダー行が必要です。あなたがこのコードを取り巻くいくつかの他のコードを持っていない限り。 –