Я пытаюсь разархивировать файл с FTP-сайта. Я пробовал его с использованием 7z в подпроцессе, а также с использованием 7z в более раннем формате os.system. Я становлюсь ближе, но когда я использую модуль zipfile в python, я решил придерживаться этого. Независимо от того, как я изменить это, я, кажется, чтобы получить один из двух ошибок, так здесь оба из них так вы все можете увидеть, где я стучал головой о стену:Устранение неполадок zip в python через ftp
z = zipfile.ZipFile(r"\\svr-dc\ftp site\%s\daily\data1.zip" % item)
z.extractall()
NotImplementedError: компрессионным 6 (развалятся) (я думаю, что это один совершенно неправильно, но полагал, что я включать)
я, кажется, чтобы получить ближе со следующим:.
z = zipfile.ZipFile(r"\\svr-dc\ftp site\%s\daily\data1.zip" % item)
z.extractall(r"\\svr-dc\ftp site\%s\daily\data1.zip" % item)
IOError: [Errno 2] No such file or directory: '\\\\svr-dc...'
Загвоздка с этим, что это на самом деле давая мне первое имя файла в zip. Я вижу файл AJ07242013.PRN в конце ошибки, поэтому я чувствую себя ближе, потому что он по крайней мере доходит до чтения содержимого zip-файла.
Практически любая итерация этого, которую я пытаюсь получить, дает мне одну из этих двух ошибок или синтаксическую ошибку, но это легко решить, а не мою главную проблему.
Извините за то, что вы так долго наматывались. Я бы хотел, чтобы это работало, поэтому дайте мне знать, что вы думаете, что мне нужно делать.
EDIT:
Так 7z, наконец, был добавлен в пути и проходит через без каких-либо ошибок, как с подпроцесса, а также os.system. Тем не менее, я все еще не могу заставить ничего распаковывать. Мне кажется, из всего, что я прочитал в документации на python, я должен использовать модуль subprocess.communicate() для извлечения этого файла, но он просто не распаковывается. Когда я использую os.system, он продолжает говорить мне, что он не может найти архив.
import subprocess
cmd = ['7z', 'e']
sp = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
sp.communicate('r"\C:\Users\boster\Desktop\Data1.zip"')
Я не думаю, что sp.communicate правильно, но если я что-нибудь добавить к нему у меня слишком много аргументов.
Похоже, что я получаю сообщение об ошибке «Не могу найти ожидаемый файл» при импорте из подпроцесса. Я не прохожу мимо третьей строки этого кода до сбоя. 'подпроцесс импорта cmd = [' 7z ',' e ',' Test.7z ',' Test ',' -mx9 '] sp = subprocess.Popen (cmd, stderr = subprocess.STDOUT, stdout = subprocess.PIPE) «Кажется, что он терпит неудачу на этой третьей линии и даже не входит в функцию. Мысли? – Benjooster
И я знаю, что фактический «7z e» работает, потому что он распакует элементы в командной строке за пределами python. – Benjooster
Это должно сработать ... если это какое-то утешение! Является ли это стеком исключений python, заканчивающимся на «Система не может найти ожидаемый файл»? Это означает, что он не смог найти 7z. Правильно ли он установлен? Попробуйте выполнить несколько тестов в интерактивной оболочке python из того же места, где вы запускаете свой обычный скрипт, например 'subprocess.call (['7z'])' (он должен печатать 7z-справку) и 'os.isfile ('Test.7z ') '(это должно быть верно). Вам не нужен -mx9 на конце, но я думаю, что это в основном безвредно. – tdelaney