Bestanden met een bepaalde extensie alleen in Python vinden

  1. glob.glob bestandszoekmethode
  2. os.listdir() bestandszoekmethode
  3. pathlib.glob bestandszoekmethode
  4. Zoek bestanden met een bepaalde extensie in de map en de bijbehorende submappen
  5. pathlib module zoekbestanden recursief

glob.glob bestandszoekmethode

We kunnen de glob.glob module gebruiken om de bestanden met een bepaalde extensie alleen in Python te vinden.

import glob

targetPattern = r"C:\Test\*.txt"
glob.glob(targetPattern)

De bovenstaande codes laten zien hoe u de bestanden met de extensie txt in de map kunt vinden C:\Test.

os.listdir() bestandszoekmethode

os.listdir() functie toont alle bestanden in de gegeven map, zonder de informatie over het bestandspad. Je kan de bestanden met de specifieke extensie uitpakken met behulp van de str.endswith() functie.

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['test.txt', 'test1.txt']

U moet het volledige pad met os.path.join() functie construeren.

>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [os.path.join(fileDir, _) for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test1.txt']

pathlib.glob bestandszoekmethode

pathlib module is geïntroduceerd in Python 3.4 die objectgeoriënteerde bestandssysteempaden biedt. Het biedt twee stijlen: Windows-paden in Windows OS en POSIX-paden in Unix-achtige systemen.

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt')]

Het resultaat wordt weergegeven met WindowsPath en je kan het resultaat converteren naar de stringvoorstelling door toe te voegen str() , zoals

>>> [str(_) for _ in pathlib.Path(fileDir).glob(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test.txt']

Zoek bestanden met een bepaalde extensie in de map en de bijbehorende submappen

Het patroon C:\Test\*.txt vindt alleen de txt bestanden in de map C:\Test , maar niet in de submappen. Als u ook txt bestanden in de submappen wilt vinden , kan je het patroon een beetje wijzigen.

import glob

targetPattern = r"C:\Test\**\*.txt"
glob.glob(targetPattern)

De jokertekens ** tussen Test en .text betekent dat de txt bestanden zowel in de map als in de submappen moeten worden gevonden.

pathlib module zoekbestanden recursief

Net als bij het toevoegen ** in glob.glob recursief bestanden zoeken, kan je ook toevoegen ** in pathlib.Path.glob methode om de bestanden met een bepaalde extensie recursief vinden.

>>> import pathlib
>>> fileDir = r"C:\Test"
>>> fileExt = r"**\*.txt"
>>> list(pathlib.Path(fileDir).glob(fileExt))
[WindowsPath('C:/Test/test.txt'), WindowsPath('C:/Test/test1.txt'), WindowsPath('C:/Test/sub/test1.txt')]

Gerelateerde Artikelen - Python File

  • Alle bestanden van een map ophalen
  • Een bestand en map verwijderen
  • Hoe tekst aan een bestand in Python toe te voegen
  • Hoe te controleren of een bestand bestaat in Python