我需要提取要读取的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文件列表。
看来我在data
回调中收到的writeline
是一些奇怪的符号,并且比filedata.write(data)
抛出错误:
{UnicodeEncodeError}'charmap' codec can't encode character '\x8b' in position 1: character maps to <undefined>
。
我真的可以在这里使用一些帮助。
答案 0 :(得分:2)
我没有ftp服务器可以尝试使用,但这应该可以工作:
import os
from ftplib import FTP
def writeline(data):
filedata.write(data)
ftp = FTP('ftp.my.domain.com')
ftp.login(user="username",passwd="password")
ftp.cwd('inner_folder')
filedata = open('mytargz.tar.gz', 'wb')
ftp.retrbinary('RETR %s' % ftp.nlst()[0], writeline)
请注意,我们使用写入二进制文件'wb'
打开文件,并要求ftp返回二进制文件而不返回文本,并且回调函数仅在不添加分隔符的情况下进行写入