Elegir un archivo en Python con un simple diálogo

Me gustaría obtener la ruta del archivo como entrada en mi aplicación de consola de Python.

Actualmente solo puedo pedir una ruta completa como entrada en la consola.

¿Hay alguna forma de activar una interfaz de usuario simple donde los usuarios puedan seleccionar un archivo en lugar de escribir la ruta completa?

¿Qué hay de usar tkinter?

from Tkinter import Tk from tkinter.filedialog import askopenfilename Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file print(filename) 

¡Hecho!

Versión de Python 3.x de la respuesta de Etaoin para completar:

 from tkinter.filedialog import askopenfilename filename = askopenfilename() 

Con EasyGui (documentación generada por pydoc y epydoc para la versión 0.96):

 import easygui print easygui.fileopenbox() 

Instalar:

 pip install easygui 

Manifestación:

 import easygui easygui.egdemo() 

Utilice el módulo tkFileDialog que forma parte de la instalación estándar.

 import tkFileDialog print tkFileDialog.askopenfilename() 

Otra opción a considerar es Zenity: http://freecode.com/projects/zenity .

Tuve una situación en la que estaba desarrollando una aplicación de servidor Python (sin componente GUI) y, por lo tanto, no quería introducir una dependencia en ningún kit de herramientas GUI de Python, pero quería que algunos de mis scripts de depuración estuvieran parametrizados por los archivos de entrada y quisiera solicite visualmente al usuario un archivo si no especificó uno en la línea de comandos. Zenity era un ajuste perfecto. Para lograr esto, invoque “zenity –file-selection” utilizando el módulo de subproceso y capture la salida estándar. Por supuesto, esta solución no es específica de Python.

Zenity es compatible con múltiples plataformas y ya está instalado en nuestros servidores de desarrollo, por lo que facilitó nuestra depuración / desarrollo sin introducir una dependencia no deseada.