2014-01-28 1 views
1

Когда я запускаю свою программу, я получаю следующую ошибку и не уверен, как ее исправить. Может кто-нибудь помочь объяснить, что это за ошибка и как ее исправить? Newb здесь, так что детали оценены. Спасибо за ваше время заранее!Ошибка при распаковке с помощью Pyside Qtgui

Код: выход

#!/usr/bin/python 
import zipfile 
from PySide import QtGui 
import re 

#Select file to extract 
app = QtGui.QApplication([]) 
dialog = QtGui.QFileDialog() 
dialog.setFileMode(QtGui.QFileDialog.AnyFile) 
if (dialog.exec()): 
    fileName = dialog.selectedFiles() 


#Select Directory to extract to 
dialog = QtGui.QFileDialog() 
dialog.setFileMode(QtGui.QFileDialog.Directory) 
dialog.setOption(QtGui.QFileDialog.ShowDirsOnly) 
if (dialog.exec()): 
    dirName = dialog.selectedFiles() 

print("Extracting.....") 
zFile= zipfile.ZipFile(fileName) 
zFile.extractall(dirName) 

Ошибка:

Traceback (most recent call last): 
    File "C:\Users\Jennifer\Documents\BatchScripts\unzip.py", line 22, in <module> 

    zFile= zipfile.ZipFile(fileName) 
    File "C:\Python33\lib\zipfile.py", line 933, in __init__ 
    self._RealGetContents() 
    File "C:\Python33\lib\zipfile.py", line 970, in _RealGetContents 
    endrec = _EndRecData(fp) 
    File "C:\Python33\lib\zipfile.py", line 237, in _EndRecData 
    fpin.seek(0, 2) 
AttributeError: 'list' object has no attribute 'seek' 

ответ

2

В ваших файлов и целевых блоков кода каталога, dialog.selectedFiles()returns a list. zipfile.ZipFile может обрабатывать только один файл за раз, следовательно, ваша ошибка. Чтобы перебрать список, предоставляемой dialog.selectedFiles(), используйте следующее:

for archive in fileName: # you should probably change it to fileNames to reflect its true nature 
    zfile = zipfile.ZipFile(archive) 
    print("Extracting " + str(zfile.filename) + "...") 
    zfile.extractall(dirName[0]) # also a list, extract to first item and ignore rest 

и вы должны быть все готово.

+0

Последняя часть неверна и будет устанавливать 'fileName/dirName' значение' None'. Метод [selectFile] (https://qt-project.org/doc/qt-4.8/qfiledialog.html#selectFile) используется для предварительного выбора файла в диалоговом окне и ничего не возвращает. Правильный подход заключается в использовании 'dialog.selectedFiles() [0]' (если, конечно, диалог не отменен). – ekhumoro

+0

@ekhumoro - спасибо за это, я удалил вторую часть своего ответа. Я смотрел документацию PySide, и метод 'selectFile()' не указывал конкретно его возвращаемое значение. – MattDMo

+0

Спасибо всем .. Это сработало отлично. – user1925422

 Смежные вопросы

  • Нет связанных вопросов^_^