Как я могу вызвать WinRar в Python для Windows? Все еще проблематично - PullRequest
3 голосов
/ 27 января 2012

Используя модуль zipfile, я создал сценарий для извлечения моих заархивированных файлов, но метод повреждает все, кроме текстовых файлов.

def unzip(zip):
         filelist = []
         dumpfold = r'M:\SVN_EReportingZones\eReportingZones\data\input\26012012'
         storage = r'M:\SVN_EReportingZones\eReportingZones\data\input\26012012__download_dump'
         file = storage + '\\' + zip
         unpack = dumpfold + '\\' + str(zip)
         print file

         try:

                     time.sleep(1)
                     country = str(zip[:2])
                     countrydir =  dumpfold + '\\' + country
                     folderthere = 0
                     if exists(countrydir):
                        folderthere = 1           

                     if folderthere == 0:
                       os.makedirs(countrydir)

                     zfile = zipfile.ZipFile(file, 'r')
##                     print zf.namelist()
                     time.sleep(1)
                     shapepresent = 0

Здесь у меня проблема - при чтении и записи заархивированных данных команда zipfile, кажется, делает ее непригодной для рассматриваемых программ - я пытаюсь разархивировать шейп-файлы для использования в ArcGIS ...

                     for info in zfile.infolist():
                         fname = info.filename
                         data = zfile.read(fname)
                         zfilename = countrydir + '\\' + fname
                         fout = open(zfilename, 'w')# reads and copies the data
                         fout.write(data)
                         fout.close()
                         print 'New file created ----> %s' % zfilename





         except:
                        traceback.print_exc()
                        time.sleep(5)

Можно ли вызвать WinRar с помощью системной команды и заставить ее распаковать меня? Ура, Алекс

EDIT

Используя метод wb, он работает для большинства моих файлов, но некоторые все еще повреждены. Когда я использовал winRar, чтобы вручную разархивировать проблемные файлы, они загружаются правильно, и они также показывают больший размер файла.

Пожалуйста, кто-нибудь может указать мне направление загрузки winRar для полного процесса распаковки?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Вы открываете файл в режиме текст . Попробуйте:

       fout = open(zfilename, 'wb')# reads and copies the data

b открывает файл в двоичном режиме , где библиотеки времени выполнения не пытаются выполнить преобразование новой строки.

0 голосов
/ 02 февраля 2012

Чтобы ответить на второй раздел вашего вопроса, я предлагаю библиотека посланников . Чтобы использовать winRar с посланником:

import envoy
r = envoy.run('unrar e {0}'.format(zfilename))
if r.status_code > 0:
    print r.std_err
print r.std_out

Чтобы сделать это без посланника:

import subprocess
r = subprocess.call('unrar e {0}'.format(zfilename), shell=True)
print "Return code for {0}: {1}".format(zfilename, r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...