Bestanden met een bepaalde extensie alleen in Python vinden

Jinku Hu 30 januari 2023 20 december 2019
  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
Bestanden met een bepaalde extensie alleen in Python vinden

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')]
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

Gerelateerde Artikelen - Python File