从 BytesIO 解压一个 bz2 文件
decompress a bz2 file from BytesIO
我想读取服务器中的bz2文件,解压后用csv解析器读取,还是报错;
myfile = bz2.BZ2File(bio.read(), "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
import paramiko
from config import config
import bz2
import csv
import StringIO
from io import BytesIO
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(config.get('mrc_ssh', 'host'), username=config.get('mrc_ssh', 'user'))
sftp_client = ssh.open_sftp()
_file = sftp_client.open('/home/myfile.bz2')
bio = BytesIO(_file.read())
print bio
myfile = bz2.BZ2File(bio.read(), "rb")
reader = csv.DictReader(myfile)
for row in reader:
print row
bz2.BZ2File
将 filename 作为第一个参数。不是实际数据。
要么使用(如果你可以在本地存储文件):
myfile = bz2.BZ2File('/home/myfile.bz2', "rb")
或使用一次性解压功能bz2.decompress
uncompressed_data = bz2.decompress(bio.read())
我想读取服务器中的bz2文件,解压后用csv解析器读取,还是报错;
myfile = bz2.BZ2File(bio.read(), "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
import paramiko
from config import config
import bz2
import csv
import StringIO
from io import BytesIO
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(config.get('mrc_ssh', 'host'), username=config.get('mrc_ssh', 'user'))
sftp_client = ssh.open_sftp()
_file = sftp_client.open('/home/myfile.bz2')
bio = BytesIO(_file.read())
print bio
myfile = bz2.BZ2File(bio.read(), "rb")
reader = csv.DictReader(myfile)
for row in reader:
print row
bz2.BZ2File
将 filename 作为第一个参数。不是实际数据。
要么使用(如果你可以在本地存储文件):
myfile = bz2.BZ2File('/home/myfile.bz2', "rb")
或使用一次性解压功能bz2.decompress
uncompressed_data = bz2.decompress(bio.read())