logo

Jak używać funkcji Glob() do rekurencyjnego wyszukiwania plików w Pythonie?

Glob to ogólny termin używany do definiowania technik dopasowywania określonych wzorców zgodnie z regułami związanymi z powłoką Unix. Systemy i powłoki Linux i Unix również obsługują glob, a także zapewniają funkcjeglob()>w bibliotekach systemowych.

W Pythonie do pobierania używany jest moduł glob pliki/ścieżki pasujący do określonego wzoru. Reguły wzorców glob są zgodne ze standardowymi regułami rozwijania ścieżek Uniksa. Przewiduje się również, że według testów porównawczych dopasowywanie nazw ścieżek w katalogach jest szybsze niż inne metody. W przypadku glob możemy również używać symboli wieloznacznych('*, ?, [ranges])>oprócz dokładnego wyszukiwania ciągów, aby wyszukiwanie ścieżki było prostsze i wygodniejsze.



Notatka: Moduł ten jest wbudowany w język Python, więc nie ma potrzeby instalowania go z zewnątrz.

Przykład:








ciąg przycinania Java

# Python program to demonstrate> # glob using different wildcards> > > import> glob> > > print>(>'Named explicitly:'>)> for> name>in> glob.glob(>'/home/geeks/Desktop/gfg/data.txt'>):> >print>(name)> > # Using '*' pattern> print>(>' Named with wildcard *:'>)> for> name>in> glob.glob(>'/home/geeks/Desktop/gfg/*'>):> >print>(name)> > # Using '?' pattern> print>(>' Named with wildcard ?:'>)> for> name>in> glob.glob(>'/home/geeks/Desktop/gfg/data?.txt'>):> >print>(name)> > # Using [0-9] pattern> print>(>' Named with wildcard ranges:'>)> for> name>in> glob.glob(>'/home/geeks/Desktop/gfg/*[0-9].*'>):> >print>(name)>

>

>

Wyjście :

wzorce projektowe Java

python-glob

Używanie funkcji Glob() do rekurencyjnego wyszukiwania plików

Możemy skorzystać z funkcjiglob.glob()>Lubglob.iglob()>bezpośrednio z modułu glob, aby rekursywnie pobierać ścieżki z katalogów/plików i podkatalogów/podplików.

Składnia:

 glob.glob(pathname, *, recursive=False)>
 glob.iglob(pathname, *, recursive=False)>

Notatka: Gdy ustawiono rekurencjęTrue> **>po którym następuje separator ścieżki('./**/')>dopasuje dowolne pliki lub katalogi.

Przykład:




# Python program to find files> # recursively using Python> > > import> glob> > > # Returns a list of names in list files.> print>(>'Using glob.glob()'>)> files>=> glob.glob(>'/home/geeks/Desktop/gfg/**/*.txt'>,> >recursive>=> True>)> for> file> in> files:> >print>(>file>)> > > # It returns an iterator which will> # be printed simultaneously.> print>(>' Using glob.iglob()'>)> for> filename>in> glob.iglob(>'/home/geeks/Desktop/gfg/**/*.txt'>,> >recursive>=> True>):> >print>(filename)>

>

>

Wyjście :

aktor Govindy

python-glob
W przypadku starszych wersji Pythona:
Najprostszą metodą jest użycie os.walk() ponieważ jest specjalnie zaprojektowany i zoptymalizowany, aby umożliwić rekurencyjne przeglądanie drzewa katalogów. Lub możemy również użyć os.listdir() aby pobrać wszystkie pliki z katalogu i podkatalogów, a następnie odfiltrować.

Zobaczmy to na przykładzie-
Przykład:




# Python program to find files> # recursively using Python> > > import> os> > # Using os.walk()> for> dirpath, dirs, files>in> os.walk(>'src'>):> >for> filename>in> files:> >fname>=> os.path.join(dirpath,filename)> >if> fname.endswith(>'.c'>):> >print>(fname)> > '''> Or> We can also use fnmatch.filter()> to filter out results.> '''> for> dirpath, dirs, files>in> os.walk(>'src'>):> >for> filename>in> fnmatch.>filter>(files,>'*.c'>):> >print>(os.path.join(dirpath, filename))> > # Using os.listdir()> path>=> 'src'> dir_list>=> os.listdir(path)> for> filename>in> fnmatch.>filter>(dir_list,>'*.c'>):> >print>(os.path.join(dirpath, filename))>

>

>

Wyjście :

pełna tabela prawdy sumatora
 ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c>