Чтение CSV-файлов из zip-архива с помощью python-3.x - PullRequest
0 голосов
/ 09 мая 2018

У меня есть архив с несколькими файлами csv.

Например, предположим, что myarchive.zip содержит myfile1.csv, myfile2.csv, myfile3.csv

В python 2.7 Мне удалось итеративно загрузить все myfiles в pandas, используя

import pandas as pd
import zipfile

with zipfile.ZipFile(myarchive.zip, 'r') as zippedyear:
 for filename in ['myfile1.csv', 'myfile2.csv', 'myfile3.csv']:
     mydf = pd.read_csv(zippedyear.open(filename))

Теперь, делая то же самое с Python 3, выдает ошибку

ParserError: итератор должен возвращать строки, а не байты (вы открывали файл в текстовом режиме?)

Я в недоумении. Есть идеи, в чем проблема? Спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

Действительно странно, поскольку единственный режим, который вы можете указать, это r/w (символьные режимы).

Вот обходной путь; прочитайте файл, используя file.read, загрузите данные в буфер StringIO и передайте его в read_csv.

from io import StringIO

with zipfile.ZipFile(myarchive.zip, 'r') as zippedyear:
    for filename in ['myfile1.csv', 'myfile2.csv', 'myfile3.csv']:
         with zippedyear.open(filename) as f:
             mydf = pd.read_csv(io.StringIO(f.read()))
...