使用 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 找不到指定的模块

PyInstaller 和 PySide 和 QtGui

如何传递要在 Pyside2 中调用的函数?

PySide QtGui.QGraphicsWidget 子父变换

如何在pyside中为QtGui.QFileDialog.getOpenFileName定义一个QDir?

从 pyqtgraph.Qt 导入 QtGui 为 *