Como verificar um conjunto de arquivos em conformidade com um esquema de nomenclatura

votos
2

Eu tenho um monte de arquivos (episódios de TV, apesar de que é bastante arbitrária) que eu quero verificar corresponder a um esquema de nomenclatura / organização específica ..

Atualmente: Eu tenho três matrizes de regex, um para nomes de arquivos válidos, um para arquivos que estão faltando um nome episódio, e um para caminhos válidos.

Então, eu ciclo embora cada regex válido-filename, se ele corresponde, anexá-lo a um dict válido, se não, fazer o mesmo com os regexs faltando-ep-nome, se ele corresponde isso eu anexá-lo a um inválido dict com um código de erro (2: 'faltando nome epsiode'), se ele corresponde a nenhum dos dois, ele é adicionado ao inválido com o 'nome malformado' código de erro.

O código atual pode ser encontrada aqui

Eu quero adicionar uma regra que verifica a presença de um arquivo folder.jpg em cada diretório, mas para adicionar isso faria o código substancialmente mais confuso em seu estado atual ..

Como eu poderia escrever este sistema de forma mais expansível?

As regras de que necessita para verificar seria ..

  • Arquivo está no formato Show Name - [01x23] - Episode Name.aviou Show Name - [01xSpecial02] - Special Name.aviouShow Name - [01xExtra01] - Extra Name.avi
  • Se filename é no formato de Show Name - [01x23].aviexibi-lo uma seção 'faltando nome episódio' da saída
  • O caminho deve ser no formato Show Name/season 2/the_file.avi(onde season 2 deve ser o número temporada correta no nome do arquivo)
  • cada Show Name/season 1/pasta deve conter folder.jpg

.alguma ideia? Enquanto eu estou tentando verificar episódios de TV, este conceito / código deve ser capaz de aplicar a muitas coisas ..

O único pensamento que eu tinha era uma lista de dicts no formato:

checker = [
{
    'name':'valid files',
    'type':'file',
    'function':check_valid(), # runs check_valid() on all files
    'status':0 # if it returns True, this is the status the file gets
}
Publicado 20/08/2008 em 23:50
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Eu quero adicionar uma regra que verifica a presença de um arquivo folder.jpg em cada diretório, mas para adicionar isso faria o código substancialmente mais confuso em seu estado atual ..

Isso não parece ruim. Na verdade o seu código atual faz isso muito bem, e Sven mencionado uma boa maneira de fazê-lo bem:

  1. Obter uma lista de todos os arquivos
  2. Verifique se há arquivos "necessária"

Você teria apenas têm adicionar ao dicionário uma lista de arquivos necessários:

checker = {
  ...
  'required': ['file', 'list', 'for_required']
}

Na medida em que haja uma maneira melhor / extensível para fazer isso? Eu não sou exatamente certo. Eu só podia realmente pensar em uma maneira de, eventualmente, cair as "múltiplas" expressões regulares e construir fora da idéia de Sven para usar um delimitador. Assim, a minha estratégia seria a definição de um dicionário da seguinte forma (e eu sinto muito, eu não sei a sintaxe Python e eu sou um pouco preguiçoso para procurá-lo, mas ele deve fazer sentido. A / regex / é um atalho para um regex ):

check_dict = {
  'delim'    : /\-/,
  'parts'    : [ 'Show Name', 'Episode Name', 'Episode Number' ],
  'patterns' : [/valid name/, /valid episode name/, /valid number/ ],
  'required' : ['list', 'of', 'files'],
  'ignored'  : ['.*', 'hidden.txt'],
  'start_dir': '/path/to/dir/to/test/'
}
  1. Dividir o nome do arquivo baseado no delimitador.
  2. Verifique cada uma das partes.

Porque sua uma lista ordenada você pode determinar quais partes estão faltando e se uma seção não corresponde a nenhum padrão é mal formado. Aqui o partse patternstêm uma relação de 1 para 1. Duas matrizes em vez de um dicionário impõe a ordem.

Ignorados e arquivos necessários podem ser listados. O .e ..arquivos provavelmente deve ser ignorada automaticamente. O usuário deve ser autorizado a entrada "bolhas", que pode ser shell expandidas. Estou pensando aqui de svn:ignorepropriedades, mas englobamento é natural para listar arquivos.

Aqui start_dirseria padrão para o diretório atual, mas se você queria um único arquivo para executar testes automatizados de um monte de diretórios isso seria útil.

A ponta solta real aqui é o modelo caminho e ao longo das mesmas linhas é exigido o caminho para "arquivos válidos". Eu realmente não poderia vir acima com uma idéia sólida sem escrever um grande expressão regular e tendo grupos a partir dele ... para construir um modelo. Ele sentiu um pouco como escrever uma gramática linguagem TextMate. Mas isso começa a desviar-se na facilidade de uso. O verdadeiro problema foi que o modelo caminho não era composta por parts, o que faz sentido, mas acrescenta complexidade.

É esta estratégia em sintonia com o que você estava pensando?

Respondeu 21/08/2008 em 23:02
fonte usuário

votos
0

talvez você deve tomar a abordagem de incumprimento de: "o nome do arquivo está correto" e trabalhar a partir daí para refutar essa afirmação:

com o fato de que você só permitir que nomes de arquivos com: 'nome show', 'Número da temporada x episódio' e 'nome episódio', você sabe com certeza que esses itens devem ser separados por um "-" (traço) então você tem que tem 2 desses para um nome de arquivo a ser corretas.
se que verifica para fora, você pode usar seu código para verificar se o nome do programa corresponde ao nome do show como visto na pasta pai dos pais (caso insensível presumo), o número temporada corresponde a pasta pais valor numérico (com ou sem um extra 0 prepended).

Se, no entanto você não vê a quantidade correta de traços você sabe imediatamente que há algo errado e parar antes que o resto dos testes etc.

e, separadamente, você pode verificar se o arquivo folder.jpgexiste e tomar as medidas necessárias. ou fazer isso primeiro e filtrar esse arquivo do resto dos arquivos nessa pasta.

Respondeu 21/08/2008 em 06:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more