【发布时间】:2019-05-12 10:38:22
【问题描述】:
我需要提取我正在尝试读取的 tar.gz 文件中的 xml 文件列表。
我试过这个:
import os
from ftplib import FTP
def writeline(data):
filedata.write(data)
filedata.write(os.linesep)
ftp = FTP('ftp.my.domain.com')
ftp.login(user="username",passwd="password")
ftp.cwd('inner_folder')
filedata = open('mytargz.tar.gz', 'w')
ftp.retrlines('RETR %s' % ftp.nlst()[0], writeline)
我使用了ftp.nlst()[0],因为我的 ftp 中有一个 tar.gz 文件列表。
看起来我在writeline 回调中收到的data 是一些奇怪的符号,而filedata.write(data) 则抛出错误:
{UnicodeEncodeError}'charmap' codec can't encode character '\x8b' in position 1: character maps to <undefined>。
我真的可以在这里使用一些帮助..
【问题讨论】:
-
你想要的是 tarfile 通知,你可以将文件对象传递给它,所以将你的 ftp 读入 byteIO
io.BytesIO(my_bytes) -
是的,我认为这是错误的,但我收到的
data是一串奇怪的符号,所以我收到错误a bytes-like object is required, not 'str'.. 那里似乎有问题, 在我解压缩文件之前。 -
“字符串”没有问题。你正在接收字节,它不是文本,你不能像文本一样打印
-
io.BytesIO(data)抛出错误a bytes-like object is required, not 'str' -
我看到了这个问题,您使用
retrlines而不是retrbinary并且当您打开文件时使用'wb'打开它以写入二进制文件而不是'w'
标签: python xml ftp gzip tarfile