Gibt es eine bessere Möglichkeit, glob.glob in Python zu verwenden, um eine Liste mehrerer Dateitypen wie .txt, .mdown und .markdown zu erhalten? Momentan habe ich so etwas:
Dies ist möglicherweise die am besten lesbare Lösung. Ich würde den Fall ändern ProjectFiles zu projectFilesaber tolle Lösung.
– Hans Goldmann
2. Juni 17 um 22:38 Uhr
Beachten Sie, dass in Python 3x Path.glob('*') gibt einen Generator zurück, also müssen Sie a setzen list(...) herum, um diesen Trick anzuwenden.
– Mark Maxmeister
9. August 21 um 20:18 Uhr
tzot
Verketten Sie die Ergebnisse:
import itertools as it, glob
def multiple_file_types(*patterns):
return it.chain.from_iterable(glob.iglob(pattern) for pattern in patterns)
Dann:
for filename in multiple_file_types("*.txt", "*.sql", "*.log"):
# do stuff
glob.glob -> glob.iglob, damit die Iteratorenkette vollständig faul ausgewertet wird
– rodrigob
6. August 13 um 13:57 Uhr
Ich habe die gleiche Lösung gefunden, kannte sie aber nicht chain.from_iterable. Das ist also ähnlich, aber weniger lesbar: it.chain(*(glob.iglob(pattern) for pattern in patterns)).
– Florisla
20. April 18 um 11:35 Uhr
Gier
So viele Antworten, die nahelegen, so oft wie die Anzahl der Erweiterungen zu globben, ich würde es vorziehen, stattdessen nur einmal zu globben:
from pathlib import Path
files = (p.resolve() for p in Path(path).glob("**/*") if p.suffix in {".c", ".cc", ".cpp", ".hxx", ".h"})
glob.glob -> glob.iglob, damit die Iteratorenkette vollständig faul ausgewertet wird
– rodrigob
6. August 13 um 13:57 Uhr
Ich habe die gleiche Lösung gefunden, kannte sie aber nicht chain.from_iterable. Das ist also ähnlich, aber weniger lesbar: it.chain(*(glob.iglob(pattern) for pattern in patterns)).
– Florisla
20. April 18 um 11:35 Uhr
Zum Beispiel für *.mp3 und *.flac Bei mehreren Ordnern können Sie Folgendes tun:
mask = r'music/*/*.[mf][pl][3a]*'
glob.glob(mask)
Die Idee kann auf weitere Dateierweiterungen erweitert werden, aber Sie müssen sicherstellen, dass die Kombinationen nicht mit anderen unerwünschten Dateierweiterungen übereinstimmen, die Sie möglicherweise in diesen Ordnern haben. So, vorsichtig sein mit diesem.
Um eine beliebige Liste von Erweiterungen automatisch zu einem einzigen Glob-Muster zu kombinieren, können Sie Folgendes tun:
def multi_extension_glob_mask(mask_base, *extensions):
mask_ext = ['[{}]'.format(''.join(set(c))) for c in zip(*extensions)]
if not mask_ext or len(set(len(e) for e in extensions)) > 1:
mask_ext.append('*')
return mask_base + ''.join(mask_ext)
mask = multi_extension_glob_mask('music/*/*.', 'mp3', 'flac', 'wma')
print(mask) # music/*/*.[mfw][pml][a3]*
.
7582500cookie-checkPython glob mehrere Dateitypenyes
Sehr verwandt: stackoverflow.com/q/48181073/880783
– Bers
28. März 18 um 7:16 Uhr
Warum nicht
main_file = projectFiles1 + projectFiles2 + projectFiles3
? was auch zu einer Hauptliste mit allen Typen durch Verkettung führt– Delrius-Euphorie
4. September 2020 um 15:29 Uhr
Habe noch nie eine Datei *.mdown gesehen ..;)
–Timo
25. Dezember 2020 um 15:53 Uhr