Python Pandas无法从Other文件夹中读取文件

时间:2017-11-12 15:46:09

标签: python-3.x pandas pyqt5

我正在尝试使用pyqt5和pandas编写GUI程序来选择文件夹,从文件夹中读取所有html文件将其合并到一个pandas数据框中并输出excel文件。

我已经编写了代码,并且在从代码所在的同一目录中选择文件时工作正常。

唯一的问题是,如果我从其他目录中选择文件,则会发出“No table found”错误。

请检查下面的错误代码

Traceback (most recent call last):
File "C:\Users\prince\Desktop\Gui\final\UI.py", line 69, in go
df = pd.read_html(file)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\html.py", line          906, in read_html
keep_default_na=keep_default_na)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\html.py", line    743, in _parse
raise_with_traceback(retained)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\compat\__init__.py", line 344, in raise_with_traceback
raise exc.with_traceback(traceback)
ValueError: No tables found
[Finished in 17.8s with exit code 1]

PFB代码

import sys
import os
from bs4 import BeautifulSoup
import pandas as pd
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtGui import QIcon

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui(self)
    def init_ui(self,Consolidate):
        Consolidate.setObjectName("Consolidate")
        Consolidate.resize(410, 300)
        self.progressBar = QtWidgets.QProgressBar(Consolidate)
        self.progressBar.setGeometry(QtCore.QRect(20, 220, 381, 23))
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.pushButton = QtWidgets.QPushButton(Consolidate)
        self.pushButton.setGeometry(QtCore.QRect(320, 30, 51, 21))
        self.pushButton.setObjectName("browse")
        self.lineEdit = QtWidgets.QLineEdit(Consolidate)
        self.lineEdit.setGeometry(QtCore.QRect(20, 30, 291, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton_2 = QtWidgets.QPushButton(Consolidate)
        self.pushButton_2.setGeometry(QtCore.QRect(140, 250, 131, 41))
        self.pushButton_2.setObjectName("go")
        self.textBrowser_2 = QtWidgets.QTextEdit(Consolidate)
        self.textBrowser_2.setGeometry(QtCore.QRect(20, 70, 351, 141))
        self.textBrowser_2.setObjectName("textBrowser_2")

        self.retranslateUi(Consolidate)
        QtCore.QMetaObject.connectSlotsByName(Consolidate)

    def retranslateUi(self, Consolidate):
        _translate = QtCore.QCoreApplication.translate
        Consolidate.setWindowTitle(_translate("Consolidate", "Consolidate Excel"))
        self.pushButton.setText(_translate("Consolidate", "Browse"))
        self.lineEdit.setPlaceholderText(_translate("Consolidate", "Please Browse The Target Folder"))
        self.pushButton_2.setText(_translate("Consolidate", "Go"))

        self.pushButton.clicked.connect(self.fname)
        self.pushButton_2.clicked.connect(self.go)

        folder = str()
    def fname(self):
        global folder
        file = str(QFileDialog.getExistingDirectory(self, "Select Folder"))
        folder = (file)
        print (folder)
        self.lineEdit.setText(folder)

    def go(self):
        import pandas as pd
        dflist = list()
        fnames = (os.listdir(folder))
        counter = 0

        for file in fnames:
            if file == "Consolidate.py" or file == "QtoolAssigned.xlsx":
                continue
            else:
                print(file)
                print(folder)
                df = pd.read_html(file)

                self.textBrowser_2.append(file[7:-28])
                df = pd.read_html(file)
                df = df[0].dropna(axis=0, thresh=4)
                df['Team Name'] = str(file[7:-28])             
                dflist.append(df)
            concatdf = pd.concat(dflist,axis=0)
            concatdf.to_excel(folder+'\\'+'QtoolAssigned.xlsx', index=None)

if __name__=='__main__':
    app = QtWidgets.QApplication(sys.argv)
    ex = Window()
    ex.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

问题是因为您需要传递文件的完整路径,因为您只传递文件的名称,然后pandas将在执行GUI的文件夹中查找它,解决方案是传递完整我们使用os.path.join()

的路径
def go(self):
    import pandas as pd
    dflist = list()
    fnames = (os.listdir(folder))
    counter = 0

    for file in fnames:
        if file not in ["Consolidate.py", "QtoolAssigned.xlsx"]:
            print(file)
            print(folder)
            df = pd.read_html(os.path.join(folder, file))
            self.textBrowser_2.append(file[7:-28])
            df = df[0].dropna(axis=0, thresh=4)
            df['Team Name'] = str(file[7:-28])             
            dflist.append(df)
        concatdf = pd.concat(dflist,axis=0)
        concatdf.to_excel(os.path.join(folder, 'QtoolAssigned.xlsx'), index=None)