पायथन में खुली फ़ाइल से पथ प्राप्त करें


113

यदि मेरे पास एक खुली हुई फ़ाइल है, तो क्या osस्ट्रिंग के रूप में पूरा रास्ता प्राप्त करने के लिए कॉल है?

f = open('/Users/Desktop/febROSTER2012.xls')

से f, मुझे कैसे मिलेगा "/Users/Desktop/febROSTER2012.xls"?

जवाबों:


145

यहाँ कुंजी फ़ाइल के प्रतिनिधित्व वाली वस्तु की nameविशेषता है f। आप इसे इस तरह प्राप्त करते हैं:

>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'

क्या इसने सहायता की?


4
द्वारा बनाई गई फ़ाइलों के लिए: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')काम नहीं करता है!
— विक्टर

19
@ विक्टर: आपके द्वारा उल्लिखित प्रलेखन के नीचे tempfile, विशेष रूप से tempfile.NamedTemporaryFile, मॉड्यूल के प्रलेखन को पढ़ें tempfile.TemporaryFile। यह अस्थायी फ़ाइल के लिए विशिष्ट मामला है और, जैसा कि डॉक्स में देखा गया है, पहले से ही मौजूद समाधान है। tempfile.TemporaryFileयदि आप नाम पढ़ना चाहते हैं तो इसका उपयोग करने के लिए नहीं है।
— टाडेक

12
यदि आप खुली ('foo.txt', 'w') का उपयोग करके एक फ़ाइल बनाते हैं और फिर f.name करते हैं, तो यह आपको आउटपुट foo.txt
— searchengine27

ज़ान एक समाधान देता है जो सापेक्ष पथों के लिए भी काम करता है। उसका जवाब नीचे देखें।
— मार्कस

यदि आपको नाम की आवश्यकता है तो tempfile.NamedTemporaryFile है।
— अपोलो डेटा

96

मेरे पास एक ही मुद्दा था। यदि आप एक रिश्तेदार पथ का उपयोग कर रहे हैं os.path.dirname (पथ) केवल सापेक्ष पथ लौटाएगा। os.path.realpath करता है चाल:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)

15
यह वास्तव में असली जवाब है।
— ब्लूट्रिन

1
यह केवल तभी काम करता है जब सापेक्ष फ़ाइल पथ अभी भी सही फ़ाइल पथ है। यदि मैं फ़ाइल नाम को '~ / दस्तावेज़ /' निर्देशिका से 'text.txt' के रूप में निर्दिष्ट करता हूं और फिर निर्देशिकाओं को '~ /' में बदल देता os.path.realpathहूं, तो '~ / दस्तावेज़ / text.txt' के बजाय '~ / text.txt' वापस आ जाएगा।
— । नील्सन

1
मैं realpath के साथ एक समस्या पर ध्यान दिया। यह फ़ाइलों के अल्फा वर्णों के मामले को सही नहीं करता है, बल्कि खुले बयान में उपयोग किए गए मामले को रखता है। मुझे उम्मीद थी कि यह फ़ाइल नाम वापस कर देगा क्योंकि यह वास्तव में फ़ाइल सिस्टम पर मौजूद है। (यह विंडोज है, निश्चित रूप से)
— रुफुसवीस

12

और अगर आप केवल निर्देशिका नाम प्राप्त करना चाहते हैं और इसके साथ आने वाले फ़ाइल नाम की कोई आवश्यकता नहीं है, तो आप osपायथन मॉड्यूल का उपयोग करके निम्न पारंपरिक तरीके से कर सकते हैं ।

>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'

इस तरह आप डायरेक्टरी स्ट्रक्चर को पकड़ सकते हैं।


यदि आप उपयोग करते हैं तो यह एक रिक्त स्ट्रिंग देता है f = open('febROSTER2012.xls')। आप पूर्ण पथ पर कैसे पहुँच सकते हैं?
— NZD

3

आप इसे इस तरह भी प्राप्त कर सकते हैं।

filepath = os.path.abspath(f.name)

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