我有一个包含多个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:迭代器应该返回字符串,而不是字节(你打开了吗? 文本模式下的文件?)
我在这里不知所措。不知道是什么问题? 谢谢!
答案 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()))