क्या कोई ऐसा तरीका है जो मैं किसी निर्देशिका पर ग्लोब का उपयोग कर सकता हूं, एक विशिष्ट एक्सटेंशन के साथ फाइल प्राप्त करने के लिए, लेकिन केवल फ़ाइल नाम ही, संपूर्ण पथ नहीं?
क्या कोई ऐसा तरीका है जो मैं किसी निर्देशिका पर ग्लोब का उपयोग कर सकता हूं, एक विशिष्ट एक्सटेंशन के साथ फाइल प्राप्त करने के लिए, लेकिन केवल फ़ाइल नाम ही, संपूर्ण पथ नहीं?
जवाबों:
यह किसी की मदद कर सकता है:
names = [os.path.basename(x) for x in glob.glob('/your_path')]
map(os.path.basename, glob.glob("your/path"))
सभी फ़ाइल नाम और एक्सटेंशन के साथ एक पुनरावृत्ति देता है।
os.path.basename मेरे लिए काम करता है।
यहाँ कोड उदाहरण है:
import sys,glob
import os
expectedDir = sys.argv[1] ## User input for directory where files to search
for fileName_relative in glob.glob(expectedDir+"**/*.txt",recursive=True): ## first get full file name with directores using for loop
print("Full file name with directories: ", fileName_relative)
fileName_absolute = os.path.basename(fileName_relative) ## Now get the file name with os.path.basename
print("Only file name: ", fileName_absolute)
आउटपुट:
Full file name with directories: C:\Users\erinksh\PycharmProjects\EMM_Test2\venv\Lib\site-packages\wheel-0.33.6.dist-info\top_level.txt
Only file name: top_level.txt
मैं सापेक्ष ग्लोबिंग के लिए समाधान फिर से लिखता हूं (esp। जब मुझे एक जिपफाइल में आइटम जोड़ने की आवश्यकता होती है) - यह वही है जो आमतौर पर ऐसा दिखता है।
# Function
def rel_glob(pattern, rel):
"""glob.glob but with relative path
"""
for v in glob.glob(os.path.join(rel, pattern)):
yield v[len(rel):].lstrip("/")
# Use
# For example, when you have files like: 'dir1/dir2/*.py'
for p in rel_glob("dir2/*.py", "dir1"):
# do work
pass
यदि आप CSV फाइल की तलाश में हैं:
file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.csv')]
यदि आप EXCEL फाइल की तलाश में हैं:
file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.xlsx')]