Быстрый и простой файловый диалог в Python? - PullRequest
80 голосов
/ 17 февраля 2012

У меня есть простой скрипт, который анализирует файл и загружает его содержимое в базу данных. Мне не нужен пользовательский интерфейс, но сейчас я запрашиваю у пользователя файл для разбора, используя raw_input, что крайне недружелюбно, особенно потому, что пользователь не может скопировать / вставить путь. Я хотел бы быстрый и простой способ представить диалог выбора файла пользователю, он может выбрать файл, а затем он загружается в базу данных. (В моем случае использования, если они выбрали неправильный файл, он не сможет выполнить синтаксический анализ и не будет проблемой, даже если он был загружен в базу данных.)

import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()

Этот код близок к тому, что я хочу, но он оставляет раздражающий пустой кадр открытым (который не может быть закрыт, вероятно, потому что я не зарегистрировал обработчик события закрытия).

Мне не нужно использовать tkInter, но, поскольку он входит в стандартную библиотеку Python, он является хорошим кандидатом на самое быстрое и простое решение.

Какой быстрый и простой способ запросить файл или имя файла в сценарии без какого-либо другого пользовательского интерфейса?

Ответы [ 5 ]

153 голосов
/ 02 января 2013

Tkinter - самый простой способ, если вы не хотите иметь никаких других зависимостей.Чтобы отобразить только диалоговое окно без каких-либо других элементов графического интерфейса, необходимо скрыть корневое окно, используя метод withdraw:

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

file_path = filedialog.askopenfilename()

вариант Python 2:

import Tkinter, tkFileDialog

root = Tkinter.Tk()
root.withdraw()

file_path = tkFileDialog.askopenfilename()
21 голосов
/ 17 февраля 2012

Вы можете использовать easygui :

import easygui

path = easygui.fileopenbox()

Чтобы установить easygui, вы можете использовать pip:

pip3 install easygui

Это единственный чистый модуль Python (easygui.py), который использует tkinter.

16 голосов
/ 17 февраля 2012

Попробуйте с wxPython :

import wx

def get_path(wildcard):
    app = wx.App(None)
    style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST
    dialog = wx.FileDialog(None, 'Open', wildcard=wildcard, style=style)
    if dialog.ShowModal() == wx.ID_OK:
        path = dialog.GetPath()
    else:
        path = None
    dialog.Destroy()
    return path

print get_path('*.txt')
4 голосов
/ 17 февраля 2012

Если вам не нужен пользовательский интерфейс или вы ожидаете, что программа будет работать в CLI, вы можете проанализировать путь к файлу в качестве аргумента.Это позволит вам использовать функцию автозаполнения вашего CLI, чтобы быстро найти нужный файл.

Это, вероятно, будет полезно, если скрипт неинтерактивен, кроме ввода filepath.

2 голосов
/ 17 февраля 2012

Проверьте EasyGUI, очень простой в использовании модуль, который должен выполнять эту работу - http://easygui.sourceforge.net/

Вы бы использовали функцию fileopenbox - http://www.ferg.org/easygui/easygui.html#-fileopenbox

...