¿Diálogo de archivo rápido y fácil en Python?

Tengo un script simple que analiza un archivo y carga su contenido en una base de datos. No necesito una interfaz de usuario, pero ahora mismo le estoy pidiendo al usuario que raw_input el archivo usando raw_input que es lo más hostil, especialmente porque el usuario no puede copiar / pegar la ruta. Me gustaría una forma rápida y fácil de presentar un diálogo de selección de archivos al usuario, ellos pueden seleccionar el archivo y luego cargarlo en la base de datos. (En mi caso de uso, si eligieran el archivo incorrecto, fallaría el análisis y no sería un problema, incluso si estuviera cargado en la base de datos).

 import tkFileDialog file_path_string = tkFileDialog.askopenfilename() 

Este código está cerca de lo que quiero, pero deja un marco vacío molesto abierto (que no se puede cerrar, probablemente porque no he registrado un controlador de eventos cerrado).

No tengo que usar tkInter, pero como está en la biblioteca estándar de Python, es un buen candidato para una solución más rápida y fácil.

¿Cuál es una forma rápida y fácil de solicitar un archivo o nombre de archivo en un script sin ninguna otra interfaz de usuario?

Tkinter es la forma más fácil si no desea tener otras dependencias. Para mostrar solo el cuadro de diálogo sin ningún otro elemento de la GUI, debe ocultar la ventana raíz mediante el método de withdraw :

 import tkinter as tk from tkinter import filedialog root = tk.Tk() root.withdraw() file_path = filedialog.askopenfilename() 

Variante de Python 2:

 import Tkinter, tkFileDialog root = Tkinter.Tk() root.withdraw() file_path = tkFileDialog.askopenfilename() 

Puedes usar easygui :

 import easygui path = easygui.fileopenbox() 

Para instalar easygui , puedes usar pip :

 pip3 install easygui 

Es un único módulo de Python puro ( easygui.py ) que usa tkinter .

Probar con 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') 

Si no necesita la interfaz de usuario o espera que el progtwig se ejecute en una CLI, puede analizar la ruta de archivo como un argumento. Esto le permitiría usar la función de autocompletar de su CLI para encontrar rápidamente el archivo que necesita.

Probablemente, esto solo sería útil si la secuencia de comandos no es interactiva además de la entrada de ruta de archivo.

Echa un vistazo a EasyGUI, un módulo muy fácil de usar que debería hacer el trabajo – http://easygui.sourceforge.net/

Usaría la función fileopenbox – http://www.ferg.org/easygui/easygui.html#-fileopenbox