In Python su un sistema GNU/Linux, qual è il modo più veloce per scansionare ricorsivamente una directory per tutti i file .MOV
o .AVI
e per memorizzarli in una lista?In Python, il modo più veloce per creare un elenco di file in una directory con una certa estensione
In Python, il modo più veloce per creare un elenco di file in una directory con una certa estensione
risposta
Esempio per un elenco di file nella directory corrente. È possibile espandere questo per percorsi specifici.
import glob
movlist = glob.glob('*.mov')
È possibile utilizzare os.walk() per camminare recuresive e glob.glob() o fnmatch.filter() per la corrispondenza del file:
Scegli questa answer
userei os .walk per scansionare la directory, os.path.splitext per afferrare il suffisso e filtrarli da solo.
suffixes = set(['.AVI', '.MOV'])
for dirpath, dirnames, filenames in os.walk('.'):
for f in filenames:
if os.path.splitext(f)[1] in suffixes:
yield os.path.join(dirpath, f)
Questa è probabilmente la soluzione migliore perché può essere facilmente adattata per applicare la corrispondenza senza distinzione tra maiuscole e minuscole. – ekhumoro
pattern = re.compile('.*\.(mov|MOV|avi|mpg)$')
def fileList(source):
matches = []
for root, dirnames, filenames in os.walk(source):
for filename in filter(lambda name:pattern.match(name),filenames):
matches.append(os.path.join(root, filename))
return matches
Il modulo [fnmatch] (http://docs.python.org/library/fnmatch.html#module-fnmatch) supporta solo schemi glob molto semplici, quindi il filtro non funzionerà. – ekhumoro
@ekhumoro se funziona, i simboli ([],.,?, *,()) Sono ammessi a glob, codice di prova python e vedere quale funziona – Jhonathan
Il tuo modello è equivalente a '*. [MovMOVaipg()]'. Questo corrisponderà, ad esempio, '* .i',' * .a', '* .M', ecc, ma _not_' * .MOV', '* .avi', ecc. Provalo per te! – ekhumoro
Python 2.x:
import os
def generic_tree_matching(rootdirname, filterfun):
return [
os.path.join(dirname, filename)
for dirname, dirnames, filenames in os.walk(rootdirname)
for filename in filenames
if filterfun(filename)]
def matching_ext(rootdirname, extensions):
"Case sensitive extension matching"
return generic_tree_matching(
rootdirname,
lambda fn: fn.endswith(extensions))
def matching_ext_ci(rootdirname, extensions):
"Case insensitive extension matching"
try:
extensions= extensions.lower()
except AttributeError: # assume it's a sequence of extensions
extensions= tuple(
extension.lower()
for extension in extensions)
return generic_tree_matching(
rootdirname,
lambda fn: fn.lower().endswith(extensions))
Utilizzare uno matching_ext
o matching_ext_ci
con argomenti la cartella principale e una proroga o una tupla di estensioni:
>>> matching_ext(".", (".mov", ".avi"))
Suggerisco l'uso di os.walk
e un attentamente reading of its documentation.
Questo può essere un approccio uno di linea:
[f for root,dirs,files in os.walk('/your/path') for f in files if is_video(f)]
Dove in is_video
di controllare le estensioni.
- 1. Il modo più veloce per unificare un elenco in Python
- 2. Python recupera il file più recente in una directory con una determinata estensione
- 3. Trova un file con una certa estensione nella cartella
- 4. Il modo più veloce per creare file in C#
- 5. Il modo più veloce in C# per trovare un file in una directory con oltre 20.000 file
- 6. Shell: trova i file in un elenco in una directory
- 7. Elenco di una directory locale con estensione chrome
- 8. modo migliore per ottenere i file da una directory filtrata da determinata estensione in php
- 9. Il modo più veloce per comprimere un elenco di float in byte in python
- 10. il modo più veloce per creare checksum per file di grandi dimensioni in python
- 11. il modo più veloce per contare il numero di file in una directory contenente centinaia di migliaia di file
- 12. PHP + Wordpress - ottenere un elenco di file da una directory
- 13. Creare un file in una directory specificata
- 14. modo più elegante per creare una matrice 2D in Python
- 15. Il modo più veloce per invertire una stringa in C
- 16. il modo più veloce per eseguire la ricerca in python con una parola chiave parziale
- 17. Come creare un file su una directory?
- 18. Il modo più veloce per creare un elenco di stringhe univoche da un loop?
- 19. Copia un elenco di file in una directory
- 20. Il modo più veloce per stampare una riga in un file
- 21. Come posso creare un elenco di file nella directory corrente e nelle sue sottodirectory con una determinata estensione?
- 22. Come creare una copia superficiale di un elenco in Python
- 23. modo più veloce per rimuovere parole di arresto in Python
- 24. Il modo più veloce per trovare un elemento in una lista?
- 25. Il modo più veloce per leggere una colonna di numeri in un array
- 26. Il modo più veloce per copiare file in Java
- 27. Il modo più veloce per eliminare la punteggiatura da una stringa unicode in Python
- 28. Rinominare più file in una directory utilizzando Python
- 29. Il modo più semplice per mantenere una struttura dati in un file in python?
- 30. Il modo più veloce ed efficiente per creare XML
Il più veloce probabilmente implica la scrittura dell'estensione per utilizzare il codice nativo. Ma lo vuoi davvero? –
Anche se non si vuole farlo, a seconda di quanti file e directory stiamo parlando, potrebbe essere più veloce eseguire il comando esterno 'find' piuttosto che elaborare i risultati di' os.walk() '. Ma se la soluzione 'os.walk()' è abbastanza veloce, è più elegante e facile da capire/modificare. –