2016-05-01 11 views
0

私のPythonスクリプトと同じディレクトリにないディレクトリからCSVファイルを読み込もうとしています。CSVがバイトではなく文字列を返すエラー

さらに、CSVファイルは完全に同じ名前のZIPフォルダに保存されます(唯一の違いは.zipで終わり、もう1つは.csvです)。

現在、私は、しかし、私はエラーを取得しています、ファイルからデータを開いて、取得するためにPythonのzipfilecsvライブラリを使用しています:

Traceback (most recent call last): File "write_pricing_data.py", line 13, in <module> 
    for row in reader: 
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?) 

マイコード:

import os, csv 
from zipfile import * 

folder = r'D:/MarketData/forex' 
localFiles = os.listdir(folder) 

for file in localFiles: 
    zipArchive = ZipFile(folder + '/' + file) 

    with zipArchive.open(file[:-4] + '.csv') as csvFile: 
     reader = csv.reader(csvFile, delimiter=',') 

     for row in reader: 
      print(row[0]) 

をどのようにすることができますこのエラーを解決しますか?

+0

ファイルをテキストエディタで開いて内容を確認していますか? – dbliss

+0

さて、かなり大きいですが、まだ標準のcsv、コンマ区切りとすべて。 – ng150716

+1

エラーの完全なトレースバックを投稿すると役立つでしょう。 – dbliss

答えて

1

これはちょっとしたクルーであり、もっと良い方法があると確信しています(今すぐ私を逃してしまいます)。新しい行が埋め込まれていない場合は、次のように使用できます。

import zipfile, csv 

zf = zipfile.ZipFile('testing.csv.zip') 
with zf.open('testing.csv', 'r') as fin: 
    # Create a generator of decoded lines for input to csv.reader 
    # (the csv module is only really happy with ASCII input anyway...) 
    lines = (line.decode('ascii') for line in fin) 
    for row in csv.reader(lines): 
     print(row) 
関連する問題