HOWTO · Python
Come trovare file con una certa estensione solo in Python
Questo articolo dimostra come trovare i file con una certa estensione solo in Python, e introduce anche come trovare tali file non solo nella directory ma anche nelle sue sottodirectory.
In questa pagina
Questo articolo introduce diversi metodi per trovare i file con una certa estensione solo in Python.
Metodo glob.glob per trovare file con una certa estensione
Potremmo usare il modulo glob.glob per trovare i file con una certa estensione solo in Python.
import glob
targetPattern = r"C:\Test\*.txt"
glob.glob(targetPattern)
I codici di cui sopra mostrano come trovare i file con estensione txt nella directory C:\Test.
os.listdir() metodo per trovare i file con una certa estensione
La funzione os.listdir() elenca tutti i file nella directory data, senza le informazioni sul percorso del file. Si possono estrarre i file con l’estensione specifica usando la funzione str.endswith().
>>> import os
>>> fileDir = r"C:\Test"
>>> fileExt = r".txt"
>>> [_ for _ in os.listdir(fileDir) if _.endswith(fileExt)]
['test.txt', 'test1.txt']
È necessario costruire il percorso completo con la funzione os.path.join().
>>> 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']
Metodo pathlib.glob per trovare i file con una certa estensione
modulo pathlib è introdotto in Python 3.4 che offre percorsi di filesystem orientati agli oggetti. Esso fornisce due stili: Percorsi Windows nel sistema operativo Windows OS e percorsi POSIX nei sistemi Unix-alike.
>>> 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')]
Il risultato è rappresentato con WindowsPath, ed è possibile convertire il risultato nella rappresentazione delle stringhe aggiungendo str(), come
>>> [str(_) for _ in pathlib.Path(fileDir).glob(fileExt)]
['C:\\Test\\test.txt', 'C:\\Test\\test.txt']
Trovare i file con una certa estensione nella directory e le sue sottodirectory in Python
Il pattern C:\Test\*.txt cerca solo i file txt nella directory C:\Test, ma non nelle sue sottodirectory. Se si vogliono ottenere anche i file txt nelle sottodirectory, si può modificare un po’ il pattern.
import glob
targetPattern = r"C:\Test\**\*.txt"
glob.glob(targetPattern)
Il jolly ** tra Test e \*.txt significa che dovrebbe trovare i file txt sia nella directory che nelle sue sottodirectory.
Il modulo pathlib cerca i file in modo ricorsivo
Simile all’aggiunta di ** in glob.glob per cercare i file in modo ricorsivo, si può anche aggiungere ** nel metodo pathlib.Path.glob per trovare i file con una certa estensione in modo ricorsivo.
>>> 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')]