En Python en un sistema GNU/Linux, ¿cuál es la forma más rápida de escanear recursivamente un directorio para todos los archivos .MOV
o .AVI
, y almacenarlos en una lista?En Python, la forma más rápida de crear una lista de archivos en un directorio con una cierta extensión
Respuesta
Ejemplo de una lista de archivos en el directorio actual. Puede expandir esto para rutas específicas.
import glob
movlist = glob.glob('*.mov')
Puede utilizar os.walk() para caminar y recuresive glob.glob() o fnmatch.filter() para la coincidencia de archivo:
Marque esta answer
que haría uso de OS .walk para escanear el directorio, os.path.splitext para tomar el sufijo y filtrarlo yo mismo.
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)
Esta es probablemente la mejor solución, ya que se puede adaptar fácilmente para aplicar la coincidencia de mayúsculas y minúsculas. – 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
El módulo [fnmatch] (http://docs.python.org/library/fnmatch.html#module-fnmatch) solo admite patrones glob muy simples, por lo que su filtro no funcionará. – ekhumoro
@ekhumoro si funciona, los símbolos ([],.,?, *,()) Se pueden englobar, el código de prueba de Python y ver cuál funciona – Jhonathan
Su patrón es equivalente a '*. [MovMOVaipg()]'. Esto coincidirá, por ejemplo, '* .i',' * .a', '* .M', etc., pero _not_' * .MOV', '* .avi', etc. ¡Inténtalo por ti mismo! – 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))
uso ya sea matching_ext
o matching_ext_ci
con argumentos la carpeta raíz y una extensión o una tupla de extensiones:
>>> matching_ext(".", (".mov", ".avi"))
Sugiero el uso de os.walk
y cuidadosamente reading of its documentation.
Esto puede ser un enfoque de un trazador de líneas:
[f for root,dirs,files in os.walk('/your/path') for f in files if is_video(f)]
Donde en is_video
comprobar sus extensiones.
- 1. La forma más rápida de buscar una lista en python
- 2. La forma más rápida de unificar una lista en Python
- 3. ¿La forma más rápida de escribir archivos hdf5 con Python?
- 4. La forma más rápida de crear archivos en C#
- 5. Buscar un archivo con una cierta extensión en la carpeta
- 6. ¿Cómo puedo obtener una lista de todos los archivos con una cierta extensión desde un directorio específico?
- 7. La forma más rápida de empaquetar una lista de flotantes en bytes en python
- 8. ¿Forma rápida de crear una lista de valores en C#?
- 9. La forma más rápida de reposicionar la sublista en python
- 10. ¿La forma más rápida de crear una lista de cadenas únicas desde un bucle?
- 11. mejor manera de conseguir los archivos de un directorio filtrada por cierta extensión en php
- 12. la forma más rápida de crear una suma de comprobación para archivos de gran tamaño en python
- 13. ¿Cómo puedo crear una lista de archivos en el directorio actual y sus subdirectorios con una extensión dada?
- 14. ¿Cuál es la forma más fácil de crear una extensión C opcional para un paquete python?
- 15. ¿Forma más rápida de sumar una lista de números que con un bucle for?
- 16. ¿Cuál es una forma más rápida de buscar un valor en una lista de tuplas?
- 17. ¿La forma más rápida de copiar una tabla en mysql?
- 18. La forma más rápida de procesar archivos de gran tamaño en Python
- 19. La forma más rápida de tomar una captura de pantalla con Python en Windows
- 20. La forma más rápida de importar archivos CSV en MATLAB
- 21. una forma más rápida de descargar varios archivos
- 22. La forma más rápida de convertir un iterador en una lista
- 23. Crear un diccionario con una lista de listas en Python
- 24. ¿La forma más eficiente de calcular la frecuencia de valores en una lista de Python?
- 25. En .Net, ¿cuál es la forma más rápida de buscar de forma recursiva todos los archivos desde un directorio raíz?
- 26. La forma más rápida de ordenar en Python
- 27. reforma de datos (una forma más rápida)
- 28. ¿Existe una "forma más rápida" de construir cadenas en Java?
- 29. ¿Cómo obtener la lista de todos los archivos con extensión ESY en un directorio?
- 30. La manera más rápida en C# para encontrar un archivo en un directorio con más de 20,000 archivos
Más rápido probablemente implica escribir una extensión para usar código nativo. ¿Pero realmente quieres eso? –
Incluso si no quiere hacer eso, dependiendo de la cantidad de archivos y directorios de los que estamos hablando, podría ser más rápido ejecutar el comando 'find' externo que procesar los resultados de' os.walk() '. Pero si la solución 'os.walk()' es lo suficientemente rápida, es más elegante y fácil de comprender/editar. –