CSV Should Return Strings, Not Bytes Error

孤街醉人 提交于 2019-12-12 03:28:30

问题


I am trying to read CSV files from a directory that is not in the same directory as my Python script.

Additionally the CSV files are stored in ZIP folders that have the exact same names (the only difference being one ends with .zip and the other is a .csv).

Currently I am using Python's zipfile and csv libraries to open and get the data from the files, however I am getting the error:

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?)

My code:

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])

How can I resolve this error?


回答1:


It's a bit of a kludge and I'm sure there's a better way (that just happens to elude me right now). If you don't have embedded new lines, then you can use:

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)


来源:https://stackoverflow.com/questions/36971345/csv-should-return-strings-not-bytes-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!