【问题标题】:Select files using file browser and store the path in a python script使用文件浏览器选择文件并将路径存储在 python 脚本中
【发布时间】:2017-06-14 17:10:07
【问题描述】:

我想使用文件浏览器加载一些 .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')

【问题讨论】:

  • 是一个模块吗?还是来自import pandas as pd 的代码是一个单独的模块?将模块级代码与 PyQt 类混合在一起似乎很奇怪,而且可能不是您想要的。
  • 您要选择一个文件还是多个文件?
  • 另请注意,按照约定类 methods 以小写字母开头,因此 SingleBrowse 应该是 singleBrowse 或者 - 甚至更 Pythonic - single_browse。不管怎样,它仍然可以工作。
  • 我了解到您想通过浏览器文件选择csv0.csv和csv1.csv。我是对的?
  • @JoeP 它实际上来自 2 个独立的模块(脚本),但我只是将它们组合在一起。因为我认为一旦我创建了带有“Widget”类的按钮,我可以在“import pandas as pd”之后的代码中的某个地方调用它?谢谢:)

标签: python csv pyqt pyqt4


【解决方案1】:

如果你想一一获取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)

【讨论】:

  • 谢谢!! :p 我试过这个并调用了 main() 但它仍然无法加载正确的路径...我将在下面发布我修改过的脚本,如果可能的话,请让我知道我在哪里做错了。赞赏!!
  • main 下面是一个代码,是在同一个脚本中还是在另一个脚本中?
  • 非常感谢!!伙计,你太棒了,而且效果很好! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多