使用python-3.x从zip存档中读取CSV文件

时间:2018-05-09 18:20:24

标签: python python-3.x pandas zipfile

我有一个包含多个csv文件的压缩存档。

例如,假设myarchive.zip包含myfile1.csvmyfile2.csvmyfile3.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 :(得分:3)

确实很奇怪,因为您可以指定的唯一模式是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()))
相关问题