<p>下面是我的场景:我有一个zip文件,我正在用<code>requests</code>下载到内存中,而不是写一个文件。我正在将数据解压缩到一个名为<code>myzipfile</code>的对象中。zip文件中有一个csv文件。我想把每一行csv数据转换成一个字典。这是我到目前为止所拥有的</p>
<pre><code>import csv
from io import BytesIO
import requests
# other imports etc.
r = requests.get(url=fileurl, headers=headers, stream=True)
filebytes = BytesIO(r.content)
myzipfile = zipfile.ZipFile(filebytes)
for name in myzipfile.namelist():
mycsv = myzipfile.open(name).read()
for row in csv.DictReader(mycsv): # it fails here.
print(row)
</code></pre>
<p>错误:</p>
<pre><code>Traceback (most recent call last):
File "/usr/lib64/python3.7/csv.py", line 98, in fieldnames
self._fieldnames = next(self.reader)
_csv.Error: iterator should return strings, not int (did you open the file in text mode?)
</code></pre>
<p>看起来<code>csv.DictReader(mycsv)</code>需要一个文件对象而不是原始数据。如何将<code>mycsv</code>对象数据<code>(<class 'bytes'>)</code>中的行转换为字典列表?我试图在不将文件写入磁盘和直接从内存中的csv对象工作的情况下实现这一点</p>
<pre><code>dict_list = [] # a list
reader = csv.DictReader(open('yourfile.csv', 'rb'))
for line in reader: # since we used DictReader, each line will be saved as a dictionary
dict_list.append(line)
</code></pre>