Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python:从二进制zipfile读入csv_Python 3.x - Fatal编程技术网

Python 3.x Python:从二进制zipfile读入csv

Python 3.x Python:从二进制zipfile读入csv,python-3.x,Python 3.x,旧的python 2.7包含了有效的代码: import zipfile import csv myzip = zipfile.ZipFile('archive.zip') csv_data = csv.reader(myzip.open('db_file.csv', 'r', 'password'), delimiter=',') for rowData in csv_data: ... 我需要使用python3.5 csv.reader现在需要密码作为字节,而不是旧字符串->添加b'

旧的
python 2.7
包含了有效的代码:

import zipfile
import csv

myzip = zipfile.ZipFile('archive.zip')
csv_data = csv.reader(myzip.open('db_file.csv', 'r', 'password'), delimiter=',')
for rowData in csv_data:
  ...
我需要使用
python3.5

csv.reader
现在需要密码作为字节,而不是旧字符串->添加
b'password'
因此,它返回
csv\u数据
也作为字节。
csv.reader
正在等待字符串。

是否有一些“优雅”或“开箱即用”的方法将字节转换为字符串直接转换为csv,或者我是否必须手动使用
line.decode('ascii')
对每个字符串进行迭代?(我用这种方法从同一个存档文件中创建了一个简单的txt文件,并使用了密码)

使用
io.TextIOWrapper

如果您有加密的文件,您可能需要对密码进行编码,但句柄是通过
TextIOWrapper
动态解码的。您可能还需要将编码调整为您的文件所使用的编码

例如,这适用于我的简单
csv
文件

import zipfile
import csv
import io

myzip = zipfile.ZipFile('archive.zip')
with io.TextIOWrapper(myzip.open('db_file.csv', 'r'), encoding='ascii') as z:
    csv_data = csv.reader(z, delimiter=',')
    for rowData in csv_data:
        ...

伟大的这正是我需要的。非常感谢你。