পাইথনে ডিরেক্টরি ও ফাইল লিস্ট করার একাধিক পদ্ধতি রয়েছে।
এক ডিরেক্টরিতে ফাইল লিস্ট করা
এক নির্দিষ্ট পথ থেকে সব ফাইল বা ডিরেক্টরি পাওয়ার সবচেয়ে সহজ পদ্ধতির একটি হলো os.listdir() মেথড ব্যবহার করা।
import os
for x in os.listdir('.'):
print(x)
ফলাফল
.pytest_cache 4forces.json annotation1.py asyncWrite.txt attribute_access.py background_process.py background_process2.py BeautifulSoup_script1.py bottle_exampl1.py bottole_test1.py build built-in_funct.py callable_objects1.py cars.csv classes_instance.py class_attributes.py class_attributes1.py code_gmplot.py config.py data1.json datafile.txt …
উপরের কোডটি বর্তমান ওয়ার্কিং ডিরেক্টরি থেকে ফাইল ও ডিরেক্টরির তালিকা দেখাচ্ছে। আপনি যদি কোনো নির্দিষ্ট ডিরেক্টরি থেকে ফাইল ও ডিরেক্টরি লিস্ট করতে চান, তবে অ্যাবসোলিউট পথনাম পাস করুন:
import os
for x in os.listdir(r'C:\Python\Python361\selenium'):
print(x)
ফলাফল
geckodriver.log test1.py webdriver
ফলাফলটি আমাদের ফোল্ডার হায়ারার্কির মতোই:

উপরের আউটপুট থেকে আমরা বুঝতে পারছি না যে আমাদের আউটপুট ফাইল, ডিরেক্টরি বা লিংক কি। যদি আপনি জানতে চান এন্ট্রিটি ফাইল, ডিরেক্টরি কি সেটা, তবে os.path.isfile() ব্যবহার করে নিচের মতো করতে পারেন:
import os
for x in os.listdir('.'):
if os.path.isfile(x):
print('file-', x)
elif os.path.isdir(x):
print('directory-', x)
elif os.path.islink(x):
print('link-', x)
else:
print('---', x)
আউটপুট
directory- .pytest_cache file- 4forces.json file- annotation1.py file- asyncWrite.txt file- attribute_access.py file- background_process.py file- background_process2.py file- BeautifulSoup_script1.py file- bottle_exampl1.py file- bottole_test1.py directory- build file- built-in_funct.py file- callable_objects1.py file- cars.csv file- classes_instance.py file- class_attributes.py file- class_attributes1.py file- code_gmplot.py file- config.py file- data1.json file- datafile.txt file- datawork file- data_pandas1.csv file- data_pandas1.xlsx file- debugger_pdb.py file- debugging_timeit1.py file- debugging_timeit2.py file- define_class.py file- directoryTreeStruc.py directory- dist directory- django directory- DLLs directory- Doc file- dynamic_array_implementation.py
আমরা এক লাইনে filter() ব্যবহার করে একটি নির্দিষ্ট পথ থেকে ফাইলগুলো কलेক্ট করতে পারি:
list(filter(lambda x: os.path.isfile(x), os.listdir('.')))
আউটপুট
['4forces.json', 'annotation1.py', 'asyncWrite.txt', 'attribute_access.py', 'background_process.py', 'background_process2.py', 'BeautifulSoup_script1.py', 'bottle_exampl1.py', 'bottole_test1.py', 'built-in_funct.py', 'callable_objects1.py', 'cars.csv', 'classes_instance.py', 'class_attributes.py', 'class_attributes1.py', 'code_gmplot.py', 'config.py', 'data1.json', 'datafile.txt', 'datawork', 'data_pandas1.csv', 'data_pandas1.xlsx', 'debugger_pdb.py', 'debugging_timeit1.py', 'debugging_timeit2.py', 'define_class.py', 'directoryTreeStruc.py', 'dynamic_array_implementation.py', 'EDA_python1.py', 'EmpID.pickle', 'encapsulation.py', 'encapsulation1.py', 'enumerate1.py', 'eRecord.yaml', 'exampleCSV.csv', 'exampleCSV.py', 'exception1.py', 'exception2.py', 'exception2_1.py', 'exception3.py', 'exception3_1.py', 'exception4.py', 'exception5.py', 'exercise.txt', 'faking_files.py', 'files_background.py', 'finally.txt', 'finally_try_except.py', 'finally_try_except1.py', 'finally_try_except2.py', 'flatten&Ravel_Numpy1.py', 'functions_are_object_too.py', 'function_annotation.py', 'function_annotation1.py', 'function_annotation2.py', 'function_annotation3.py', 'function_annotation4.py', 'func_method.py', 'gc1.py', 'gmplot.py', 'gmplot1.py', 'gmplot11.py', 'gmplot2.py', 'google_search1.py', 'google_search_using_python.py', 'inheritance_example.py', 'inheriting from built-in.py', 'inheriting from built-in1.py', 'inheriting_attributes.py', 'inheriting_the_constructor.py', 'instance_data.py', 'instance_methods.py', 'interques1.py', 'invoice_file1.yaml', 'iterables1.py', 'iterables2.py', 'johnde_test1', 'jsonToPython.py', 'json_example1.json', 'json_example1.py', 'json_example2.py', 'json_script1_loadeRecord.py', 'LDE_EQUITIES_LAST_5_YEARS.csv', 'lib_request.py', 'LICENSE.txt', 'listing_files_directories.py', 'list_comprehension1.py', 'list_comprehension2.py', 'logging.log', 'logging1.py', 'magicmethods_operator_add.py', 'magicmethods_operator_add1.py', 'MainP.py', 'matplotlibsam1.py', 'metaclass1.py', 'metaclass2.py', 'metaclass3.py', 'metaclass4.py', 'method.py', 'methodOverloading.py', 'methodOverloading1.py', 'methodOverloading_defaultArgument.py', 'multiple_inheritance.py', 'multiple_inheritance1.py', 'myfile.py', 'my_map.html', 'NegativeAgeException.py', 'NegativeNumberException.py', 'NEWS.txt', 'object_lookup.py', 'OtherP.py', 'out.txt', 'pandas_script.py', 'pandas_script1.py', 'pandas_script2.py', 'pattern_matching1.py', 'pattern_matching2.py', 'pdb_example1.py', 'pdb_example2.py', 'pickle1.py', 'pickle2.py', 'pickled_list', 'pickle_dictionary1.py', 'pickle_list1.py', 'pickle_test1.py', 'placing_it_in_context.py', 'plotly.py', 'polymorphism_example.py', 'primeNum1.py', 'privateVar1.py', 'private_variable_naming.py', 'project_scrap1.py', 'pygame_script1.py', 'pygmap1.py', 'pygmap2.py', 'pygmaps.py', 'pymaps1.py', 'python.exe', 'python.pdb', 'python3.dll', 'python36.dll', 'python36.pdb', 'pythonw.exe', 'pythonw.pdb', 'python_tricks1.py', 'python_tricks2.py', 'replacing_string_to_number1.py', 'serialization web objects encoder.py', 'serialization web objects.py', 'serialization_JSON.py', 'serialization_pickle.py', 'serialization_pickle1.py', 'serialization_pickle2.py', 'serialization_pickle_storing_instances.py', 'serialization_pyaml_file1.py', 'serialization_pyaml_file2.py', 'serialization_pyaml_script1.py', 'serialization_unpickle.py', 'serialization_unpickle2.py', 'sets1.py', 'simpy1.py', 'simpy2.py', 'stocks_list.csv', 'storing_object1.py', 'storing_objects.py', 'termcolor1.py', 'test.py', 'test.txt', 'test1.py', 'test1.txt', 'test123.py', 'test2.json', 'test2.py', 'test2.txt', 'test_project1', 'test_sample1.py', 'test_sample2.py', 'test_sample3.py', 'test_sample4.py', 'tkinter1.py', 'tkinter2.py', 'tkinter_firstApp.py', 'try_except_block.py', 'tuple1.py', 'unpickle.py', 'unpickle3.py', 'unpickle_dict1.py', 'unpickle_list1.py', 'variable_arguments_list.py', 'variable_arguments_list1.py', 'vcruntime140.dll', 'winquality1.py', 'workfile1', '__init__ Constructor.py']
ফিল্টার ব্যবহার করে ডিরেক্টরির তালিকা পাওয়া:
list(filter(lambda x: os.path.isdir(x), os.listdir('.')))
আউটপুট
['.pytest_cache', 'build', 'dist', 'django', 'DLLs', 'Doc', 'etc', 'gmplot', 'gmplot-1.2.0', 'gmplot.egg-info', 'include', 'Lib', 'libs', 'networkP', 'Scripts', 'selenium', 'share', 'tcl', 'Tools', '__pycache__']
নির্দিষ্ট টাইপের ফাইল খুঁজে বের করা
নিচে একটি ডিরেক্টরিতে টেক্সট ফাইল খুঁজে বের করার এক লাইনার দেওয়া হলো। দয়া করে লক্ষ্য করুন এটি ডিরেক্টরি হায়ারার্কিতে নিচে নেমে যায় না, বরং নির্দিষ্ট ডিরেক্টরিতে মিল খুঁজে বের করে।
list(filter(lambda x: x.endswith('.txt'), os.listdir('.')))
আউটপুট
['asyncWrite.txt', 'datafile.txt', 'exercise.txt', 'finally.txt', 'LICENSE.txt', 'NEWS.txt', 'out.txt', 'test.txt', 'test1.txt', 'test2.txt']
উপরের কোডটি লিস্ট কম্প্রিহেনশন (list comprehension) দিয়েও লেখা যায়:
>>> list(x for x in os.listdir('.') if x.endswith('.txt'))
['asyncWrite.txt', 'datafile.txt', 'exercise.txt', 'finally.txt', 'LICENSE.txt', 'NEWS.txt', 'out.txt', 'test.txt', 'test1.txt', 'test2.txt']
আরেকটি পদ্ধতি হলো রেগুলার এক্সপ্রেশন (regular expression) ব্যবহার:
import re
fx = re.compile(r'\.(txt|py)')
print(list(filter(fx.search, os.listdir('.'))))
আউটপুট
['.pytest_cache', 'annotation1.py', 'asyncWrite.txt', 'attribute_access.py', 'background_process.py', 'background_process2.py', 'BeautifulSoup_script1.py', 'bottle_exampl1.py', 'bottole_test1.py', 'built-in_funct.py', 'callable_objects1.py', 'classes_instance.py', 'class_attributes.py', 'class_attributes1.py', 'code_gmplot.py', 'config.py', 'datafile.txt', 'debugger_pdb.py', 'debugging_timeit1.py', 'debugging_timeit2.py', 'define_class.py', 'directoryTreeStruc.py', 'dynamic_array_implementation.py', 'EDA_python1.py', 'encapsulation.py', 'encapsulation1.py', 'enumerate1.py', 'exampleCSV.py', 'exception1.py', 'exception2.py', 'exception2_1.py', 'exception3.py', 'exception3_1.py', 'exception4.py', 'exception5.py', 'exercise.txt', 'faking_files.py', 'files_background.py', 'finally.txt', 'finally_try_except.py', 'finally_try_except1.py', 'finally_try_except2.py', 'flatten&Ravel_Numpy1.py', 'functions_are_object_too.py', 'function_annotation.py', 'function_annotation1.py', 'function_annotation2.py', 'function_annotation3.py', 'function_annotation4.py', 'func_method.py', 'gc1.py', 'gmplot.py', 'gmplot1.py', 'gmplot11.py', 'gmplot2.py', 'google_search1.py', 'google_search_using_python.py', 'inheritance_example.py', 'inheriting from built-in.py', 'inheriting from built-in1.py', 'inheriting_attributes.py', 'inheriting_the_constructor.py', 'instance_data.py', 'instance_methods.py', 'interques1.py', 'iterables1.py', 'iterables2.py', 'jsonToPython.py', 'json_example1.py', 'json_example2.py', 'json_script1_loadeRecord.py', 'lib_request.py', 'LICENSE.txt', 'listing_files_directories.py', 'list_comprehension1.py', 'list_comprehension2.py', 'logging1.py', 'magicmethods_operator_add.py', 'magicmethods_operator_add1.py', 'MainP.py', 'matplotlibsam1.py', 'metaclass1.py', 'metaclass2.py', 'metaclass3.py', 'metaclass4.py', 'method.py', 'methodOverloading.py', 'methodOverloading1.py', 'methodOverloading_defaultArgument.py', 'multiple_inheritance.py', 'multiple_inheritance1.py', 'myfile.py', 'NegativeAgeException.py', 'NegativeNumberException.py', 'NEWS.txt', 'object_lookup.py', 'OtherP.py', 'out.txt', 'pandas_script.py', 'pandas_script1.py', 'pandas_script2.py', 'pattern_matching1.py', 'pattern_matching2.py', 'pdb_example1.py', 'pdb_example2.py', 'pickle1.py', 'pickle2.py', 'pickle_dictionary1.py', 'pickle_list1.py', 'pickle_test1.py', 'placing_it_in_context.py', 'plotly.py', 'polymorphism_example.py', 'primeNum1.py', 'privateVar1.py', 'private_variable_naming.py', 'project_scrap1.py', 'pygame_script1.py', 'pygmap1.py', 'pygmap2.py', 'pygmaps.py', 'pymaps1.py', 'python_tricks1.py', 'python_tricks2.py', 'replacing_string_to_number1.py', 'serialization web objects encoder.py', 'serialization web objects.py', 'serialization_JSON.py', 'serialization_pickle.py', 'serialization_pickle1.py', 'serialization_pickle2.py', 'serialization_pickle_storing_instances.py', 'serialization_pyaml_file1.py', 'serialization_pyaml_file2.py', 'serialization_pyaml_script1.py', 'serialization_unpickle.py', 'serialization_unpickle2.py', 'sets1.py', 'simpy1.py', 'simpy2.py', 'storing_object1.py', 'storing_objects.py', 'termcolor1.py', 'test.py', 'test.txt', 'test1.py', 'test1.txt', 'test123.py', 'test2.py', 'test2.txt', 'test_sample1.py', 'test_sample2.py', 'test_sample3.py', 'test_sample4.py', 'tkinter1.py', 'tkinter2.py', 'tkinter_firstApp.py', 'try_except_block.py', 'tuple1.py', 'unpickle.py', 'unpickle3.py', 'unpickle_dict1.py', 'unpickle_list1.py', 'variable_arguments_list.py', 'variable_arguments_list1.py', 'winquality1.py', '__init__ Constructor.py']
os.walk() ব্যবহার - রিকার্সিভ ডিসেন্ট (recursive descent)
os.walk() মেথডটি একটি ডিরেক্টরি ট্রিতে ফাইলনেম জেনারেট করে।
import os
for root, dirs, files in os.walk(r'C:\Python\Python361\selenium'):
for filename in files:
print(filename
আউটপুট
geckodriver.log test1.py x_ignore_nofocus.so x_ignore_nofocus.so getAttribute.js isDisplayed.js