मुझे किसी दिए गए निर्देशिका के अंदर सभी .asm
फ़ाइलों के माध्यम से पुन: प्रयास करने की आवश्यकता है और उन पर कुछ कार्य करें।मैं किसी दिए गए निर्देशिका में फ़ाइलों पर कैसे पुन: प्रयास कर सकता हूं?
यह एक कुशल तरीके से कैसे किया जा सकता है?
मुझे किसी दिए गए निर्देशिका के अंदर सभी .asm
फ़ाइलों के माध्यम से पुन: प्रयास करने की आवश्यकता है और उन पर कुछ कार्य करें।मैं किसी दिए गए निर्देशिका में फ़ाइलों पर कैसे पुन: प्रयास कर सकता हूं?
यह एक कुशल तरीके से कैसे किया जा सकता है?
मूल जवाब:
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
कहा जाता है के रूप में निर्देशिका पथ है:
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)
आप glob मॉड्यूल
import glob
for filename in glob.iglob('/foobar/*.asm'):
print('/foobar/%s' % filename)
का उपयोग कर यह सब वंशज फ़ाइलों पर पुनरावृति जाएगा कोशिश कर सकते हैं न सिर्फ निर्देशिका के तत्काल बच्चों:
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)
os.walk फ़ंक्शन का संदर्भ निम्न पर मिलता है: https://docs.python.org/2/library/os.path.html#os.path.walk – ScottMcC
अजगर 3.4 और बाद में मानक पुस्तकालय में pathlib प्रदान करते हैं। आप कर सकता है:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
या यदि आप सूची comprehensions पसंद नहीं है:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path
वस्तुओं आसानी से तार करने के लिए परिवर्तित किया जा सकता है।
मैं अभी तक इस कार्यान्वयन से काफी खुश नहीं हूं, मैं एक कस्टम कन्स्ट्रक्टर चाहता था जो 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)
यह निर्देशिका में तुरंत निर्देशिकाओं या फ़ाइलों को सूचीबद्ध करता है। नीचे पेड्रोमैटो द्वारा उत्तर एक रिकर्सिव लिस्टिंग करना प्रतीत होता है। –
अच्छा जवाब! मैं जोड़ सकता हूं कि आपको पाइथन "ओएस" मॉड्यूल को आयात करने की आवश्यकता है: - आयात os – Gabrer
कृपया ध्यान दें कि पायथन 3.6 निर्देशिका में बाइट्स में होने की उम्मीद है और फिर listdir बाइट्स डेटा प्रकार में फ़ाइल नामों की एक सूची भी थूक देगा इसलिए आप सीधे इसके साथ समाप्त नहीं कर सकते हैं। इस कोड को ब्लॉक करने के लिए 'निर्देशिका = os.fsencode (directory_in_str) बदल जाना चाहिए os.listdir में फ़ाइल (निर्देशिका) के लिए: ("। एएसएम ") फ़ाइल नाम = os.fsdecode (फाइल) अगर filename.endswith या filename.endswith ("। py"): # प्रिंट (os.path.join (निर्देशिका, फ़ाइल नाम)) जारी रखें: जारी रखें –