使用 Pyside Qtgui 解压时出错
Posted
技术标签:
【中文标题】使用 Pyside Qtgui 解压时出错【英文标题】:Error when Unzipping with Pyside Qtgui 【发布时间】:2014-01-28 01:03:42 【问题描述】:当我运行我的程序时,我收到以下错误并且不知道如何更正它。有人可以帮助解释这个错误是什么以及如何纠正它吗? Newb在这里,所以细节表示赞赏。提前感谢您的宝贵时间!
代码:
#!/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'
【问题讨论】:
【参考方案1】:在您的文件和目标目录代码块中,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
你应该准备好了。
【讨论】:
最后一部分错误,将fileName/dirName
设置为None
。 selectFile 方法用于在对话框中预先选择一个文件,并且不返回任何内容。正确的做法是使用dialog.selectedFiles()[0]
(当然,除非对话框被取消)。
@ekhumoro - 谢谢,我删除了答案的第二部分。我在看 PySide 文档,selectFile()
方法没有具体说明它的返回值。以上是关于使用 Pyside Qtgui 解压时出错的主要内容,如果未能解决你的问题,请参考以下文章
pySide: ExtensionLoader_Pyside_QtGUI.py 找不到指定的模块
PySide QtGui.QGraphicsWidget 子父变换