Kuinka käyttää Glob()-funktiota tiedostojen etsimiseen rekursiivisesti Pythonissa?
Glob on yleinen termi, jota käytetään määrittelemään tekniikoita, jotka sopivat määritettyihin kuvioihin Unix-kuoreen liittyvien sääntöjen mukaisesti. Linux- ja Unix-järjestelmät ja kuoret tukevat myös globia ja tarjoavat myös toimintoja glob()> järjestelmäkirjastoissa.
Pythonissa noutamiseen käytetään glob-moduulia tiedostot/polut vastaa tiettyä mallia. Globin mallisäännöt noudattavat tavallisia Unix-polun laajennussääntöjä. On myös ennustettu, että vertailuarvojen mukaan polkunimien täsmääminen hakemistoissa on muita menetelmiä nopeampaa. Globilla voimme myös käyttää jokerimerkkejä ('*, ?, [ranges])> Tarkkaa merkkijonohakua lukuun ottamatta, jotta polun haku olisi yksinkertaisempaa ja kätevämpää.
Huomautus: Tämä moduuli on sisäänrakennettu Pythonin kanssa, joten sitä ei tarvitse asentaa ulkoisesti.
Esimerkki:
# 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)> |
Lähtö:
Glob()-funktion käyttäminen tiedostojen etsimiseen rekursiivisesti
Voimme käyttää toimintoa glob.glob()> tai glob.iglob()> suoraan glob-moduulista hakeaksesi polut rekursiivisesti hakemistojen/tiedostojen ja alihakemistojen/alitiedostojen sisältä.
Syntaksi:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
Huomautus: Kun rekursiivinen on asetettu True> **> jota seuraa polun erotin ('./**/')> vastaa kaikkia tiedostoja tai hakemistoja.
Esimerkki:
# 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)> |
Lähtö:
Pythonin vanhemmat versiot:
Yksinkertaisin tapa on käyttää os.walk() koska se on erityisesti suunniteltu ja optimoitu mahdollistamaan hakemistopuun rekursiivinen selaaminen. Tai voimme myös käyttää os.listdir() saada kaikki tiedostot hakemistoon ja alihakemistoihin ja suodattaa ne pois.
Katsotaanpa sitä esimerkin kautta -
Esimerkki:
# 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))> |
Lähtö:
./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