सरल संवाद के साथ पायथन में एक फ़ाइल चुनना


127

मैं अपने पायथन कंसोल एप्लिकेशन में इनपुट के रूप में फ़ाइल पथ प्राप्त करना चाहूंगा।

वर्तमान में मैं केवल कंसोल में इनपुट के रूप में पूर्ण पथ के लिए पूछ सकता हूं।

क्या एक सरल उपयोगकर्ता इंटरफ़ेस को ट्रिगर करने का एक तरीका है जहां उपयोगकर्ता पूर्ण पथ टाइप करने के बजाय फ़ाइल का चयन कर सकते हैं?

जवाबों:


212

कैसे के बारे में 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)

किया हुआ!


मुझे टाइपर्रर मिला: 'मॉड्यूल' ऑब्जेक्ट Tk () निकासी पर कॉल करने योग्य नहीं है () - कोई विचार?
user391339

1
मुझे root = Tk.Tk () तो root.withdraw () करना था। हालांकि खुली फ़ाइल संवाद विंडो हालांकि बंद नहीं होती है।
user391339

20
पायथन 3.x का उपयोग करना और मेरा मानना ​​है कि "टिक्चर" वास्तव में सभी लोअरकेस, "टिक्चर" माना जाता है।
वेस्टआस

1
@WestAce हां, इसे "टीकंटर" से बदलकर पाइथन 3 के लिए "टिक्चर" कर दिया गया
बेन

1
क्या किसी प्रकार की फ़ाइलों की अनुमति देने का कोई तरीका है? उदाहरण के लिए। मैं चाहता हूं कि उपयोगकर्ता केवल छवि फ़ाइलों का चयन करें
शांतनु शिंदे

85

पूर्णता के लिए एटोइन के उत्तर का पायथन 3.x संस्करण:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
कुल समानता के लिए, संभवतः import tkinter+ भी होना चाहिए tkinter.Tk().withdraw()
imallett

4
यह मेरे लिए काम नहीं करता है (Mac, Python 3.6.6 पर) GUI विंडो खुलती है, लेकिन आप इसे बंद नहीं कर सकते हैं और आपको मौत का समुद्र तट मिल जाता है
बेन विंसेंट

1
मुझे भी। फ़ाइल संवाद बंद नहीं होगा
काबरा

1
यह कोड स्वीकृत उत्तर के समान ही है लेकिन अधूरा है।
एरिक

मैक 10.14.6 पर, इसने फ़ाइल खोजक को खोला, तो यह पूरी प्रणाली को क्रैश कर
गया

29

साथ EasyGui (प्रलेखन द्वारा उत्पन्न pydoc और epydoc संस्करण 0.96 के लिए):

import easygui
print(easygui.fileopenbox())

स्थापित करने के लिए:

pip install easygui

डेमो:

import easygui
easygui.egdemo()

4
यह अब तक का सबसे अच्छा समाधान है। मुख्य कारण यह है कि easygui एक पिप पैकेज है और आसान स्थापित करने के लिए है
Yonatan Naor

2
मैक OSX 10.14.5 पर, अजगर 3.6.7, सुगम 0.98.1 मैं एक भयानक दुर्घटना प्राप्त करता हूं जब मैं यह कोशिश करता हूं। सिफारिश नहीं की गई।
क्रिस्टोफर नाई

मुझे invalid syntaxत्रुटि क्यों मिल रही है print easygui.diropenbox()?
ब्रिकटॉप


1
@ChristopherBarber 10.14.6 के साथ। अजगर सिर्फ छोड़ता रहता है।
गया

11

पायथन 2 में tkFileDialogमॉड्यूल का उपयोग करें ।

import tkFileDialog

tkFileDialog.askopenfilename()

पायथन 3 में tkinter.filedialogमॉड्यूल का उपयोग करें ।

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

यह पायथन 3 में मानक स्थापना का हिस्सा नहीं है।
मिगुएलमोरिन

3

विचार करने के लिए एक अन्य विकल्प ज़ेनिटी है: http://freecode.com/projects/zenity

मेरे पास एक ऐसी स्थिति थी जहां मैं एक पायथन सर्वर एप्लिकेशन (कोई GUI घटक) विकसित नहीं कर रहा था और इसलिए किसी भी अजगर GUI टूलकिट पर निर्भरता का परिचय नहीं देना चाहता था, लेकिन मैं चाहता था कि मेरी कुछ डिबग स्क्रिप्ट को इनपुट फ़ाइलों द्वारा पैरामीटरित किया जाए और वह चाहता था यदि वे कमांड लाइन पर एक निर्दिष्ट नहीं करते हैं, तो एक फ़ाइल के लिए उपयोगकर्ता को तुरंत संकेत दें। ज़ेनिटी एकदम फिट थी। इसे प्राप्त करने के लिए, सबप्रोसेस मॉड्यूल का उपयोग करके "ज़ेनिटी - फ़िले-चयन" को आमंत्रित करें और स्टैडआउट पर कब्जा करें। बेशक यह समाधान पायथन-विशिष्ट नहीं है।

ज़ेनिटी कई प्लेटफार्मों का समर्थन करता है और हमारे देव सर्वर पर पहले से ही स्थापित होने के लिए हुआ है, इसलिए इसने एक अवांछित निर्भरता को पेश किए बिना हमारे डिबगिंग / विकास को सुविधाजनक बनाया।


0

मुझे tkinter की तुलना में wxPython के साथ बहुत बेहतर परिणाम प्राप्त हुए, जैसा कि बाद के डुप्लिकेट प्रश्न के उत्तर में दिया गया है:

https://stackoverflow.com/a/9319832

WxPython संस्करण ने फ़ाइल डायलॉग का निर्माण किया जो कि मेरे OpenSUSE Tumbleweed इंस्टॉलेशन पर xfce डेस्कटॉप के साथ किसी अन्य एप्लिकेशन के बारे में ओपन फाइल डायलॉग के समान दिखाई देता था, जबकि टिंकर ने एक अपरिचित साइड-स्क्रॉलिंग इंटरफेस के साथ पढ़ने के लिए कुछ तंग और कठिन उत्पादन किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.