У меня есть подкласс ftplib.FTP для загрузки некоторых XML-файлов с FTP-сервера.Я использовал FTP.retrbinary с Path.write_bytes в качестве обратного вызова.Скрипт успешно запущен, но xml-файлы меньше по размеру и не читаются ни одним браузером или ET.parse.Я пробовал на другом сервере с файлом mp4, и они не читаются.Когда я использую метод записи для файлового объекта, возвращаемого open в двоичном режиме, он работает с xml и mp4.
Я использую py3.5 в среде Windows 2008/7, а затем в Linux с интернет-FTP-сервером.,Я сначала попробовал с FTP.retrlines, но у файла xml есть очень длинные строки, и я предпочитаю не изменять FTP.maxline.И я подозреваю, что у меня та же проблема.
класс MyFTP (ftplib.FTP): ... def saveFile1 (self, filePath: Path): # Повреждает файлы !!command = "RETR" + str (filePath)
callback = filePath.write_bytes
try:
self.retrbinary(command, callback)
except ftplib.all_errors:
raise MyException('File retrieval failed.')
def saveFile2(self, filePath: Path): # this works
command = "RETR " + str(filePath)
fileName = str(filePath)
fd = open(fileName, 'wb')
callback = fd.write
try:
self.retrbinary(command, callback)
except ftplib.all_errors:
raise MyException('File retrieval failed.')
Я предпочитаю использовать Path для переносимости ОС вместо файлового объекта ... в любом случае, это ошибка библиотеки или что-то мне не хватает?Заранее спасибо