PyQt4使用文件浏览器选择文件并将路径存储在python脚本中

时间:2017-06-14 17:10:08

标签: python csv pyqt pyqt4

我想使用文件浏览器加载一些.csv(让我们称之为csv1)文件并在我的python脚本中运行它们。因此,它将从csv1复制一些列并生成新的.csv文件(csv2)。我编写了文件浏览器的代码,以及生成csv2文件的脚本。但是,我找不到使用文件浏览器选择csv1的方法,然后在我的脚本中输入它来创建csv2文件。

如果有人知道解决方案,请帮助评论。赞赏了很多!!

以下是我目前的代码:

from PyQt4 import QtGui
import os, sys
import subprocess

class Widget(QtGui.QWidget):

    def __init__(self):
        super(Widget, self).__init__()
        self.initUI()


    def initUI(self):
        self.setGeometry(600, 300, 400, 200)
        self.setWindowTitle('Multiple Browse')     

        btn = QtGui.QPushButton('Browse', self)
        btn.resize(btn.sizeHint())
        btn.clicked.connect(self.SingleBrowse)
        btn.move(150, 100)     

        self.show()

    def SingleBrowse(self):
        filePaths = QtGui.QFileDialog.getOpenFileNames(self, 
                                                   'Multiple File',
                                                   "Desktop",
                                                  '*.csv')

def main():
    app = QtGui.QApplication(sys.argv)
    w = Widget()
    app.exec_()


if __name__ == '__main__':
    main()


## Below codes are initially from a separate script, but I just combine them 
## together in one. Because I think maybe I could call the class function 
## "Wideget" somewhere below for using the file browser to select the files?

import pandas as pd
from pandas import DataFrame

df1 = pd.read_csv('csv0.csv') 
df2 = pd.read_csv('csv1.csv')

df3 = df1.loc[:, ['a_column', 'b_column']] 

df3[""] = "" 

df4 = df2.loc[:, ['c_column','d_column' , 'e_column']]

new = pd.concat([df3, df4], axis=1)

new.index = new.index + 1

new.to_csv('csv2.csv')

1 个答案:

答案 0 :(得分:2)

如果你想逐个获取2个文件的路径,你必须使用getOpenFileName,此外我知道它们必须是不同的文件,所以我们验证它以前没有被选中

def initUI(self):
    [...]
    self.csv = []

def SingleBrowse(self):
        if len(self.csv) < 2:
            filePath = QtGui.QFileDialog.getOpenFileName(self, 
                                                   '',
                                                   "Desktop",
                                                  '*.csv')

            if filePath != "" and not filePath in self.csv:
                self.csv.append(filePath)
        print(self.csv)

完整示例:

from PyQt4 import QtGui
import sys

class Widget(QtGui.QWidget):

    def __init__(self):
        super(Widget, self).__init__()
        self.initUI()


    def initUI(self):
        self.setGeometry(600, 300, 400, 200)
        self.setWindowTitle('Multiple Browse')     

        btn = QtGui.QPushButton('Browse', self)
        btn.resize(btn.sizeHint())
        btn.clicked.connect(self.SingleBrowse)
        btn.move(150, 100)

        self.csv = []     

        self.show()

    def SingleBrowse(self):
        if len(self.csv) < 2:
            filePath = QtGui.QFileDialog.getOpenFileName(self, 
                                                   '',
                                                   "Desktop",
                                                  '*.csv')

            if filePath != "" and not filePath in self.csv:
                self.csv.append(filePath)
        if len(self.csv) == 2:
            self.process()


    def process(self):
        import pandas as pd
        from pandas import DataFrame

        df1 = pd.read_csv(self.csv[0]) 
        df2 = pd.read_csv(self.csv[1])

        df3 = df1.loc[:, ['a_column', 'b_column']] 

        df3[""] = "" 

        df4 = df2.loc[:, ['c_column','d_column' , 'e_column']]

        new = pd.concat([df3, df4], axis=1)

        new.index = new.index + 1

        new.to_csv('csv2.csv')

def main():
    app = QtGui.QApplication(sys.argv)
    w = Widget()
    app.exec_()


if __name__ == '__main__':
    main()