Usando Python, como faço para obter uma matriz de info objetos, baseado em uma pesquisa de um sistema de arquivos?

StackOverflow https://stackoverflow.com/questions/1617666

  •  06-07-2019
  •  | 
  •  

Pergunta

Atualmente tenho um script que executa o comando find, assim:

find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7

Isto torna-se uma lista de programas de TV que foram adicionados ao meu sistema nos últimos 7 dias. Eu, então, acabam por criar alguns links simbólicos para que eu possa chegar a meus shows mais recentes TV.

Eu estou olhando para re-código isso em Python, mas eu tenho algumas perguntas que eu posso parecem encontrar as respostas para usar o Google (talvez eu não estou procurando a coisa certa). Eu acho que a melhor maneira de resumir isso é fazer a pergunta:

Como faço para realizar uma busca no meu sistema de arquivos (devo chamar find?) Que me dá uma série de info objetos (contendo a data de modificação, nome do arquivo, etc) para que eu possa classificá-los com base na data, e outras coisas que tais?

Foi útil?

Solução

import os, time

allfiles = []
now = time.time()

# walk will return triples (current dir, list of subdirs, list of regular files)
# file names are relative to dir at first
for dir, subdirs, files in os.walk("/storage/disk-1/Media/Video/TV"):
    for f in files:
        if not f.endswith(".avi"):
            continue
        # compute full path name
        f = os.path.join(dir, f)
        st = os.stat(f)
        if st.st_mtime < now - 3600*24*7:
            # too old
            continue
        allfiles.append((f, st))

Isso retornará todos os arquivos que encontrar também retornou, como uma lista de pares (nome de arquivo, resultado de estatísticas).

Outras dicas

olhar para OS módulo: os.walk é a função que orienta o sistema de arquivos, os.path é o módulo que dá o mtime arquivo e outras informações de arquivo. Também os.path define uma série de funções para análise e divisão de nomes de arquivos.

Também de interesse, módulo glob define uma função para "englobamento" strings (correspondentes uma string usando unix curingas regras)

disso, construir uma lista de correspondência de arquivo de algum critério deve ser fácil.

  • Você pode usar "encontrar" através do módulo "subprocesso".
  • Depois, use a função string "split" para dissecar cada linha
  • Para cada arquivo, utilize o módulo de OS (por exemplo getmtime etc.) para obter informações do arquivo

ou

  • Use o "passeio" e módulos "glob" para obter os caminhos de arquivo em objetos
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top