извлечение списка файлов xml из файла tar.gz с ftp сервера - PullRequest
0 голосов
/ 12 мая 2019

Мне нужно извлечь список файлов xml, которые находятся в файле tar.gz, который я пытаюсь прочитать.

Я пробовал это:

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], потому что у меня есть список файлов tar.gz в моем ftp. Похоже, что data, который я получаю в моем writeline обратном вызове, это какие-то странные символы, а затем filedata.write(data) выдает ошибку: {UnicodeEncodeError}'charmap' codec can't encode character '\x8b' in position 1: character maps to <undefined>. Я действительно могу использовать некоторую помощь здесь ..

1 Ответ

2 голосов
/ 12 мая 2019

У меня нет 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 возвращает двоичный код, а не текст, и что наша функция обратного вызова только пишет без добавления разделителей

...