ng150716 ng150716 - 1 year ago 202
Python Question

CSV Should Return Strings, Not Bytes Error

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

libraries to open and get the data from the files, however I am getting the error:

Traceback (most recent call last): File "", 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[:-4] + '.csv') as csvFile:
reader = csv.reader(csvFile, delimiter=',')

for row in reader:

How can I resolve this error?

Answer Source

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('')
with'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):