Python-ում ֆայլերի հետ աշխատելիս երբեմն մեզ անհրաժեշտ է ֆայլեր բեռնել՝ հիմնվելով որոշակի մոդելի կամ օրինաչափության (pattern) վրա: glob մոդուլը տրամադրում է ֆունկցիաներ՝ ստեղծելու տվյալ օրինաչափություններին համապատասխան ֆայլերի ցուցակներ, ինչպիսիք են նիշերը և ռեկուրսիվ որոնման հնարավորությունը "**"-ով: Ահա թե ինչպես կարող ենք import անել մոդուլը և օգտագործել այն.
import glob
txt_files = glob.glob('*.txt') # Fetches all .txt files in the current directory
print(txt_files, type(txt_files)) # Prints the list of .txt files and its type
Ենթադրենք` ընթացիկ գրացուցակում (directory) կան երեք տեքստային ֆայլեր՝ file1.txt, file2.txt և file3.txt։ Արդյունքը կլինի.
glob ֆունկցիան ընդունում է օրինաչափությունը որպես տող և վերադարձնում է ֆայլերի և գրացուցակների ցանկը, որոնք համապատասխանում են օրինաչափությանը:
Մեր նախորդ օրինակում մենք օգտագործել ենք * նիշը, որը համապատասխանում է զրո կամ ավելի սիմվոլների: Հետևաբար, *.txt-ը համընկնում է բոլոր ֆայլերի հետ, որոնք ավարտվում են .txt-ով:
Մենք կարող ենք նաև ռեկուրսիվ կերպով որոնել ֆայլերը ենթագրացուցակներում.
nested_files = glob.glob('**/*.txt', recursive=True) # Fetches all .txt files recursively
print(nested_files, type(nested_files)) # Prints the list of .txt files and its type
Ենթադրենք՝ բացի մեր նախորդ ֆայլերից, ընթացիկ գրացուցակում մենք ունենք նաև folder1, որը պարունակում է file4.txt և file5.txt։ Այս դեպքում արդյունքը կլինի.
Մեր օրինաչափության մեջ օգտագործել ենք **: Այս նշանը ուղու անվան (pathname) օրինակում նշանակում է բոլոր ֆայլերը, ինչպես նաև զրո կամ ավելի գրացուցակներ և ենթագրացուցակներ: Մենք նաև օգտագործել ենք recursive=True արգումենտը, որպեսզի ֆունկցիան կարողանա մուտք ունենալ դեպի ենթագրացուցակներ: Հետևաբար, '**/*.txt', recursive=True-ն վերցնում է բոլոր .txt ֆայլերը ընթացիկ գրացուցակից և դրա ենթագրացուցակից:
Սա օգտակար միջոց է, երբ գործ ունենք ֆայլերի ուղիների (paths) հետ կամ պետք է ավտոմատացնենք ֆայլերի հետ աշխատանքը:
Առաջադրանք․ գտեք .py ֆայլերը
Դուք աշխատում եք տեխնոլոգիական ստարտափում՝ որպես տվյալների մասնագետ։ Ձեզ հանձնարարված է դասավորել Python-ի բոլոր ֆայլերը ընթացիկ պրոյեկտում: Վերջին շաբաթների ընթացքում շտապողականության պատճառով Python ֆայլերը (.py) ցրված են ընթացիկ գրացուցակով մեկ: Ձեր խնդիրն է ստեղծել Python ծրագիր, որն օգտագործում է glob՝ ընթացիկ ֆայլային պանակում առկա բոլոր Python ֆայլերը (.py) ցուցակագրելու համար: Հաշվի առեք, որ ձեզ հետաքրքրում են միայն ֆայլերի անունները (դրանց գտնվելու վայրն էական չէ), ուստի արդյունքը պետք է լինի միայն ֆայլերի անունները՝ առանց գրացուցակի ուղու (path):
Ծրագիրը որևէ մուտքագրման կարիք չունի:
Ծրագրի ելքը պետք է պարունակի ընթացիկ գրացուցակում Python ֆայլերի անունները՝ յուրաքանչյուրը գրված նոր տողում: Գրացուցակի ուղին ելքի մեջ մի՛ ներառեք:
Նշում. Քանի որ խնդիրն ընթացիկ directory-ում ֆայլերի ցուցակագրումն է, արդյունքը կփոխվի՝ կախված կատարման պահին առկա ֆայլերից: Հետևաբար, այստեղ ելքի օրինակը զուտ պատկերավոր է և կարող է չհամընկնել իրական կատարման արդյունքի հետ: