【问题标题】:How to fix this errror builtins.TypeError: expected str, bytes or os.PathLike object, not builtin_function_or_method如何修复此错误 builtins.TypeError: expected str, bytes or os.PathLike object, not builtin_function_or_method
【发布时间】:2018-12-08 10:25:33
【问题描述】:

我有一个代码允许用户从所需的路径文件夹中选择并在 QlistWidget 中显示现有的 docx 文件。

问题是当用户选择一个文件时,系统必须返回文件的完整路径。但它显示以下错误:

builtins.TypeError:预期的 str、bytes 或 os.PathLike 对象,不是 内置函数或方法

我知道错误出在这一行的 FileListSelected 函数中:

p = pathlib.Path(self.fullPath.index)

但不知道如何解决。

示例这是 CheckPath 打印的结果:

这些是下载目录中的现有文件。

  • checkpath 完整路径=> C:\Users\test\Downloads\cv.docx
  • checkpath 显示的路径 => 下载\cv.docx

==========================================

  • checkpath Full Path=> C:\Users\test\Downloads\Volunteer Card.docx
  • checkpath 显示路径 => Downloads\Volunteer Card.docx

==========================================

  • checkpath 完整路径=> C:\Users\test\Downloads\insta maro\followers.docx
  • checkpath 显示路径 => insta maro\followers.docx

==========================================

  • 检查路径完整路径=> C:\Users\test\Downloads\PdfToText-master\examples\text-
  • capture\sample-report.doc checkpath 显示路径 => 文本捕获\sample-report.doc

代码:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import (QMimeData)
from PyQt5.QtWidgets import (QApplication, QCheckBox, QColorDialog, QDialog,
                             QErrorMessage, QFileDialog, QFontDialog, QFrame, QGridLayout,
                             QInputDialog, QLabel, QLineEdit, QMessageBox, QPushButton, QMenu,QListWidgetItem)

from PyQt5.QtWidgets import *
import pdfviewer
import pathlib
from pathlib import Path
import os
import re
from os import path

import docx


class pdfViewer(pdfviewer.Ui_PdfPreviewWindow):

    def __init__(self,PdfPreviewObj):
        pdfviewer.Ui_PdfPreviewWindow.__init__(self)

        self.PdfPreviewObj =PdfPreviewObj 
        self.setupUi(PdfPreviewObj)
        self.PdfPreviewObj.show()


        self.ExportButton.clicked.connect(self.openExport)        
        self.listWidgetPDFlist.clicked.connect(self.FileListSelected)



    def FileListSelected(self):             # Function to select the desired file from the list in the left pane


        p = pathlib.Path(self.fullPath.index)
        print("this is P==>{}".format(p))
        if self.listWidgetPDFlist.selectedItems():
            Item = p , "\\" , self.listWidgetPDFlist.selectedItems()[0].text()            
            print("this is the cuurent Item =={}".format(Item)) 
            print("===============================================")
            return Item

        else:
            print("<b>!!! NO SELECTED FILE !!!</b>\n")


    def setExistingDirectory(self):               # create a pop up fileDirectory Dialog Message  in order to select the desired folder.

        self.fileList=[]
        dialog = QDialog()
        options = QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly 
        Folder = QFileDialog.getExistingDirectory(dialog, "Open Folder" ,options=options)
        return Folder

    def checkPath(self,folder):         # Funtion to check the given path for the wanted extension (Files)

    try:
        directory=folder

        whichChecked=""
        for root,dirs,files in os.walk(directory):

            for filename in files:
                if len(self.lineEdit_Ext.text())>0:
                    self.lineEdit_Ext.setStyleSheet("background-color:white")
                    self.lineEdit_Ext.setPlaceholderText("Enter The Filetype Extention Here")

                    if filename.endswith(self.lineEdit_Ext.text()):
                        fullPath=os.path.join(root,filename)
                        print(fullPath)
                        self.fileList.append(fullPath)

                elif self.rdBtn_docx.isChecked() and filename.endswith("docx") or filename.endswith("doc") :
                    self.fullPath=os.path.join(root,filename)

                    self.p = pathlib.Path(self.fullPath)
                    print("checkpath  Full Path=> {}".format(self.p))
                    oneDir = os.path.join(*self.p.parts[-2:])                    
                    print("checkpath  Displayed Path => {}".format(oneDir))
                    print("=========================================")
                    self.fileList.append(oneDir)                        
                    whichChecked="docx - doc Ext was Selected"

                if len(self.fileList) > 0:
                    self.lineEdit_Ext.setStyleSheet("bacground-color:white;")
                    self.lineEdit_Ext.setPlaceholderText("{0}".format(whichChecked))
                else:
                    self.lineEdit_Ext.setStyleSheet("background-color:Red")
                    self.lineEdit_Ext.setPlaceholderText("No Ext is Specified")                            


        self.ListFilesInViewer(self.fileList)           # add the list into the  listWidgetPDFlist 
        self.SelectAll.setEnabled(True)

        return folder

    except Exception as e:
        print("this error occure {0}".format(e))

    def ListFilesInViewer(self,Files):              # Function to list all the files in the Left pane 
        for item1 in Files:
            item = QtWidgets.QListWidgetItem(item1)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.listWidgetPDFlist.addItem(item)
            self.lineEditTotalPDFnumber.setText(str(self.listWidgetPDFlist.count()))        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    PdfPreviewWindow = QtWidgets.QMainWindow()
    pdfViewerUi = pdfViewer(PdfPreviewWindow)
    PdfPreviewWindow.show()
    sys.exit(app.exec_())

pdfviewer.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'C:\Users\test\Documents\Python_Projects\tests_scripts\qt_creator\wse_stakckOverFlow\pdfviewer.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_PdfPreviewWindow(object):
    def setupUi(self, PdfPreviewWindow):
        PdfPreviewWindow.setObjectName("PdfPreviewWindow")
        PdfPreviewWindow.resize(767, 502)
        PdfPreviewWindow.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.centralwidget = QtWidgets.QWidget(PdfPreviewWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setMinimumSize(QtCore.QSize(749, 0))
        self.tabWidget.setStyleSheet("")
        self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded)
        self.tabWidget.setTabsClosable(False)
        self.tabWidget.setTabBarAutoHide(False)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.tab)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.ExportButton = QtWidgets.QPushButton(self.tab)
        self.ExportButton.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/export.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.ExportButton.setIcon(icon)
        self.ExportButton.setIconSize(QtCore.QSize(40, 40))
        self.ExportButton.setFlat(True)
        self.ExportButton.setObjectName("ExportButton")
        self.gridLayout_4.addWidget(self.ExportButton, 2, 2, 1, 3)
        self.groupBoxPDFlist = QtWidgets.QGroupBox(self.tab)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.groupBoxPDFlist.setFont(font)
        self.groupBoxPDFlist.setAlignment(QtCore.Qt.AlignCenter)
        self.groupBoxPDFlist.setObjectName("groupBoxPDFlist")
        self.gridLayout = QtWidgets.QGridLayout(self.groupBoxPDFlist)
        self.gridLayout.setObjectName("gridLayout")
        self.SelectAll = QtWidgets.QPushButton(self.groupBoxPDFlist)
        self.SelectAll.setEnabled(True)
        self.SelectAll.setMinimumSize(QtCore.QSize(0, 0))
        self.SelectAll.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/checkBox.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.SelectAll.setIcon(icon1)
        self.SelectAll.setIconSize(QtCore.QSize(40, 40))
        self.SelectAll.setDefault(False)
        self.SelectAll.setFlat(True)
        self.SelectAll.setObjectName("SelectAll")
        self.gridLayout.addWidget(self.SelectAll, 0, 0, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(89, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)
        self.listWidgetPDFlist = QtWidgets.QListWidget(self.groupBoxPDFlist)
        self.listWidgetPDFlist.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.listWidgetPDFlist.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.listWidgetPDFlist.setObjectName("listWidgetPDFlist")
        self.gridLayout.addWidget(self.listWidgetPDFlist, 2, 0, 1, 2)
        self.gridLayout_4.addWidget(self.groupBoxPDFlist, 1, 0, 1, 4)
        self.groupBox_2 = QtWidgets.QGroupBox(self.tab)
        font = QtGui.QFont()
        font.setPointSize(13)
        font.setBold(False)
        font.setWeight(50)
        self.groupBox_2.setFont(font)
        self.groupBox_2.setStyleSheet("")
        self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)
        self.groupBox_2.setObjectName("groupBox_2")
        self.formLayout = QtWidgets.QFormLayout(self.groupBox_2)
        self.formLayout.setObjectName("formLayout")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.pushButtonOpenFolder = QtWidgets.QPushButton(self.groupBox_2)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        self.pushButtonOpenFolder.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.pushButtonOpenFolder.setFont(font)
        self.pushButtonOpenFolder.setMouseTracking(False)
        self.pushButtonOpenFolder.setAutoFillBackground(False)
        self.pushButtonOpenFolder.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/Open.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButtonOpenFolder.setIcon(icon2)
        self.pushButtonOpenFolder.setIconSize(QtCore.QSize(36, 36))
        self.pushButtonOpenFolder.setCheckable(False)
        self.pushButtonOpenFolder.setAutoDefault(False)
        self.pushButtonOpenFolder.setDefault(False)
        self.pushButtonOpenFolder.setFlat(True)
        self.pushButtonOpenFolder.setObjectName("pushButtonOpenFolder")
        self.horizontalLayout_7.addWidget(self.pushButtonOpenFolder)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.rdBtn_docx = QtWidgets.QRadioButton(self.groupBox_2)
        self.rdBtn_docx.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/File Format Doc-507x507"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.rdBtn_docx.setIcon(icon3)
        self.rdBtn_docx.setIconSize(QtCore.QSize(30, 30))
        self.rdBtn_docx.setObjectName("rdBtn_docx")
        self.horizontalLayout_6.addWidget(self.rdBtn_docx)
        self.verticalLayout_3.addLayout(self.horizontalLayout_6)
        self.lineEdit_Ext = QtWidgets.QLineEdit(self.groupBox_2)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.lineEdit_Ext.setFont(font)
        self.lineEdit_Ext.setObjectName("lineEdit_Ext")
        self.verticalLayout_3.addWidget(self.lineEdit_Ext)
        self.horizontalLayout_7.addLayout(self.verticalLayout_3)
        self.horizontalLayout_5.addLayout(self.horizontalLayout_7)
        spacerItem1 = QtWidgets.QSpacerItem(158, 18, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_5.addItem(spacerItem1)
        self.formLayout.setLayout(0, QtWidgets.QFormLayout.SpanningRole, self.horizontalLayout_5)
        self.gridLayout_4.addWidget(self.groupBox_2, 0, 0, 1, 6)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem2)
        self.lineEditTotalPDFnumber = QtWidgets.QLineEdit(self.tab)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.lineEditTotalPDFnumber.setFont(font)
        self.lineEditTotalPDFnumber.setObjectName("lineEditTotalPDFnumber")
        self.horizontalLayout.addWidget(self.lineEditTotalPDFnumber)
        self.labelTotalPDFnumber = QtWidgets.QLabel(self.tab)
        self.labelTotalPDFnumber.setObjectName("labelTotalPDFnumber")
        self.horizontalLayout.addWidget(self.labelTotalPDFnumber)
        self.gridLayout_4.addLayout(self.horizontalLayout, 2, 0, 1, 2)
        spacerItem3 = QtWidgets.QSpacerItem(502, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_4.addItem(spacerItem3, 2, 5, 1, 1)
        self.tabWidget.addTab(self.tab, "")
        self.gridLayout_3.addWidget(self.tabWidget, 0, 1, 1, 1)
        PdfPreviewWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(PdfPreviewWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 767, 21))
        self.menubar.setObjectName("menubar")
        PdfPreviewWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(PdfPreviewWindow)
        self.statusbar.setObjectName("statusbar")
        PdfPreviewWindow.setStatusBar(self.statusbar)

        self.retranslateUi(PdfPreviewWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(PdfPreviewWindow)

    def retranslateUi(self, PdfPreviewWindow):
        _translate = QtCore.QCoreApplication.translate
        PdfPreviewWindow.setWindowTitle(_translate("PdfPreviewWindow", "فرع التحليل - محرّك البحث "))
        self.ExportButton.setToolTip(_translate("PdfPreviewWindow", "<html><head/><body><p align=\"right\"><span style=\" font-size:12pt;\">نسخ</span></p></body></html>"))
        self.groupBoxPDFlist.setTitle(_translate("PdfPreviewWindow", "Files List"))
        self.SelectAll.setToolTip(_translate("PdfPreviewWindow", "<html><head/><body><p><span style=\" font-size:12pt;\">Check All Items</span></p></body></html>"))
        self.groupBox_2.setTitle(_translate("PdfPreviewWindow", "Search Panel"))
        self.pushButtonOpenFolder.setToolTip(_translate("PdfPreviewWindow", "<html><head/><body><p><span style=\" font-size:12pt;\">فتح مجلّد</span></p></body></html>"))
        self.lineEdit_Ext.setPlaceholderText(_translate("PdfPreviewWindow", "Enter The FileType Extention Here"))
        self.labelTotalPDFnumber.setText(_translate("PdfPreviewWindow", "Total"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("PdfPreviewWindow", "البرنامج"))

import resources_rc

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    PdfPreviewWindow = QtWidgets.QMainWindow()
    ui = Ui_PdfPreviewWindow()
    ui.setupUi(PdfPreviewWindow)
    PdfPreviewWindow.show()
    sys.exit(app.exec_())

【问题讨论】:

  • 我只是快速阅读,但似乎您在某处有一个未调用的函数。你确定它不应该是 self.fullPath().index 或 self.fullPath.index() 之类的吗?
  • @AlexandreUzan 是 stackoverflow.com/tagsbecause fullPath 是处理从 CheckPath 函数返回的完整路径的变量....问题是我不知道如何将 checkPath 函数返回的完整路径转移到 FileListSelected 函数中。

标签: python path pyqt5 qlistwidget


【解决方案1】:

看起来 self.fullPath 已经是一个字符串,因为你正在这样做:

self.fullPath=os.path.join(root,filename)

返回一个字符串。

那么当您执行self.fullPath.index 时,您将调用str 的索引属性,这是一个内置函数,因此是builtins.TypeError: expected str, bytes or os.PathLike object, not builtin_function_or_method。

我最好的猜测是检查 self.fullPath 的所有出现,看看它是否总是它应该是的对象。

【讨论】:

  • 看看我添加示例的更新问题
【解决方案2】:

问题可能是您在函数“setExistingDirectory”中返回了一些内容,然后您启动了 elif 而不是 if。所以不应该到达第一个“返回文件夹”之后的代码。如果达到,它将引发异常。

这意味着,fullPath 永远不会被评估。

def setExistingDirectory(self):               # create a pop up fileDirectory Dialog Message  in order to select the desired folder.

        self.fileList=[]
        dialog = QDialog()
        options = QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly 
        Folder = QFileDialog.getExistingDirectory(dialog, "Open Folder" ,options=options)
        return Folder


                    elif self.rdBtn_docx.isChecked() and filename.endswith("docx") or filename.endswith("doc") :
                        self.fullPath=os.path.join(root,filename)

【讨论】:

  • 我明白了,FullPath 变量是在 setExistingDirectory 中创建的。您可以尝试在以下行设置断点: self.p = pathlib.Path(self.fullPath) 可能无法到达该点,因为它也以 elif 开头,这很奇怪。
  • 好的,setExistingDirectory 中还有一些拼写错误,例如“return folder”与“return Folder”。
  • 我将编辑问题并添加显示结果的示例
  • 文件夹是 checkPath() 函数的参数
  • 我编辑我的问题并添加包含 elif 语句的函数 checkPath()
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 2020-11-07
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
相关资源
最近更新 更多