जवाबों:
मूल उत्तर:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
उपरोक्त उत्तर के पायथन 3.6 संस्करण, का उपयोग करते हुए os
- यह मानते हुए कि आपके पास str
एक चर के रूप में निर्देशिका पथ है directory_in_str
:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
या पुनरावर्ती, का उपयोग कर pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue
print(os.path.join(directory, filename))
print(os.path.join(directory_in_str, filename))
अजगर 3.6 में काम करने के लिए इसे बदलने की आवश्यकता है
for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
करते हैंif filename.endswith(".asm") or filename.endswith(".py"):
यह केवल सभी तात्कालिक संतानों पर निर्देशिका के तत्काल बच्चों को पुनरावृत्त करेगा:
import os
for subdir, dirs, files in os.walk(rootdir):
for file in files:
#print os.path.join(subdir, file)
filepath = subdir + os.sep + file
if filepath.endswith(".asm"):
print (filepath)
आप ग्लोब मॉड्यूल का उपयोग करके देख सकते हैं :
import glob
for filepath in glob.iglob('my_dir/*.asm'):
print(filepath)
और पायथन 3.5 के बाद से आप उपनिर्देशिकाएँ भी खोज सकते हैं:
glob.glob('**/*.txt', recursive=True) # => ['2.txt', 'sub/3.txt']
डॉक्स से:
ग्लोब मॉड्यूल उन सभी मार्गों का पता लगाता है जो यूनिक्स शेल द्वारा उपयोग किए गए नियमों के अनुसार एक निर्दिष्ट पैटर्न से मेल खाते हैं, हालांकि परिणाम मध्यस्थ आदेश में वापस किए जाते हैं। कोई टिल्ड विस्तार नहीं किया जाता है, लेकिन *, और [] के साथ व्यक्त चरित्र रेंज का सही मिलान किया जाएगा।
पायथन 3.5 के बाद से, os.scandir ( ) के साथ चीजें बहुत आसान हैं
with os.scandir(path) as it:
for entry in it:
if entry.name.endswith(".asm") and entry.is_file():
print(entry.name, entry.path)
Listdir () के बजाय स्कैंडिर () का उपयोग करना कोड के प्रदर्शन को बढ़ा सकता है जिसमें फ़ाइल प्रकार या फ़ाइल विशेषता जानकारी की भी आवश्यकता होती है, क्योंकि os.DirEntry ऑब्जेक्ट इस जानकारी को उजागर करते हैं यदि ऑपरेटिंग सिस्टम किसी निर्देशिका को स्कैन करते समय प्रदान करता है। सभी os.DirEntry विधियाँ एक सिस्टम कॉल कर सकती हैं, लेकिन is_dir () और is_file () में आमतौर पर केवल प्रतीकात्मक लिंक के लिए सिस्टम कॉल की आवश्यकता होती है; os.DirEntry.stat () को हमेशा यूनिक्स पर एक सिस्टम कॉल की आवश्यकता होती है, लेकिन केवल विंडोज पर प्रतीकात्मक लिंक के लिए एक की आवश्यकता होती है।
entry
एक है posix.DirEntry जैसे काम के तरीकों में से एक समूह के साथ प्रकार entry.is_dir()
, is_file()
,is_symlink()
पायथन 3.4 और बाद में मानक पुस्तकालय में पाथलिब की पेशकश करता है। तुम यह कर सकते थे:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
या यदि आपको सूची की समझ नहीं है:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path
वस्तुओं को आसानी से तारों में परिवर्तित किया जा सकता है।
यहां बताया गया है कि मैं पायथन में फ़ाइलों के माध्यम से कैसे पुनरावृति करता हूं:
import os
path = 'the/name/of/your/path'
folder = os.fsencode(path)
filenames = []
for file in os.listdir(folder):
filename = os.fsdecode(file)
if filename.endswith( ('.jpeg', '.png', '.gif') ): # whatever file types you're using...
filenames.append(filename)
filenames.sort() # now you have the filenames and can do something with them
इस तकनीक का कोई भी उल्लंघन किसी भी आदेश का पालन नहीं करता है
यूप, सुपर अप्रत्याशित। ध्यान दें कि मैं फ़ाइल नाम को सॉर्ट करता हूं, जो महत्वपूर्ण है यदि फ़ाइलों का क्रम मायने रखता है, अर्थात वीडियो फ्रेम या समय पर निर्भर डेटा संग्रह के लिए। हालांकि अपने फ़ाइल नाम में सूचकांकों को रखना सुनिश्चित करें!
from pkg_resources import parse_version
और filenames.sort(key=parse_version)
यह किया।
निर्देशिका और सूची को संदर्भित करने के लिए आप ग्लोब का उपयोग कर सकते हैं :
import glob
import os
#to get the current working directory name
cwd = os.getcwd()
#Load the images from images folder.
for f in glob.glob('images\*.jpg'):
dir_name = get_dir_name(f)
image_file_name = dir_name + '.jpg'
#To print the file name with path (path will be in string)
print (image_file_name)
सरणी में सभी निर्देशिका की सूची प्राप्त करने के लिए आप ओएस का उपयोग कर सकते हैं :
os.listdir(directory)
मैं इस कार्यान्वयन से अभी तक बहुत खुश नहीं हूँ, मैं चाहता था कि एक कस्टम कंस्ट्रक्टर हो जो ऐसा करता है DirectoryIndex._make(next(os.walk(input_path)))
कि आप केवल उस पथ को पारित कर सकते हैं जिसके लिए आप फ़ाइल प्रविष्टि चाहते हैं। संपादन में आपका स्वागत है!
import collections
import os
DirectoryIndex = collections.namedtuple('DirectoryIndex', ['root', 'dirs', 'files'])
for file_name in DirectoryIndex(*next(os.walk('.'))).files:
file_path = os.path.join(path, file_name)
मुझे वास्तव में उस scandir
निर्देश का उपयोग करना पसंद है जो os
पुस्तकालय में बनाया गया है । यहाँ एक काम कर उदाहरण है:
import os
i = 0
with os.scandir('/usr/local/bin') as root_dir:
for path in root_dir:
if path.is_file():
i += 1
print(f"Full path is: {path} and just the name is: {path.name}")
print(f"{i} files scanned successfully.")