Hvordan sjekke sett med filer samsvare med en navneskjema

stemmer
2

Jeg har en haug med filer (TV-episoder, selv om det er ganske vilkårlig) som jeg ønsker å sjekke matche en bestemt navne / organisasjon ordningen ..

Nå: Jeg har tre matriser av regex, en for gyldige filnavn, en for filer mangler en episode navn, og ett for gyldige baner.

Da jeg sløyfe om hver valid-filnavn regex, hvis det stemmer, føyer det til en gyldig dict, hvis ikke, gjør det samme med de manglende-ep-navnet regexs, om det samsvarer dette jeg legge det til en ugyldig dict med en feilkode (2: 'mangler epsiode navn'), hvis det passer verken, blir det lagt til ugyldige med 'misformet navnet' feilkode.

Den nåværende koden finner du her

Jeg vil legge til en regel som sjekker for tilstedeværelsen av en folder.jpg fil i hver katalog, men å legge dette ville gjøre koden betydelig mer rotete i sin nåværende tilstand ..

Hvordan kunne jeg skrive dette systemet i en mer utvid måte?

Reglene den trenger for å sjekke ville være ..

  • Filen er i formatet Show Name - [01x23] - Episode Name.avieller Show Name - [01xSpecial02] - Special Name.aviellerShow Name - [01xExtra01] - Extra Name.avi
  • Hvis filnavnet er i formatet Show Name - [01x23].avivise det en 'missing episode navn' i produksjonen
  • Banen skal være i formatet Show Name/season 2/the_file.avi(der sesong 2 bør være riktig sesong i filnavnet)
  • hver Show Name/season 1/mappe skal inneholde folder.jpg

.noen ideer? Mens jeg prøver å kontrollere TV-episoder, bør dette konseptet / code kunne gjelde for mange ting ..

Den eneste tanken jeg hadde var en liste over dicts i formatet:

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
}
Publisert på 20/08/2008 klokken 22:50
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Jeg vil legge til en regel som sjekker for tilstedeværelsen av en folder.jpg fil i hver katalog, men å legge dette ville gjøre koden betydelig mer rotete i sin nåværende tilstand ..

Dette ser ikke dårlig. Faktisk den nåværende koden gjør det veldig bra, og Sven nevnt en god måte å gjøre det så godt:

  1. Få en liste over alle filene
  2. Se etter "nødvendige" filer

Du ville bare ha legge til ordlisten en liste over nødvendige filer:

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

Så langt som det er en bedre / utvidbar måte å gjøre dette? Jeg er ikke helt sikker. Jeg kunne bare virkelig tenke på en måte å muligens slippe "flere" vanlige uttrykk og bygge ut av Sven idé for å bruke en skilletegn. Så min strategi ville være å definere en ordbok som følger (og jeg beklager at jeg ikke vet Python syntaks og jeg er en smule for lat til å slå det opp, men det bør være fornuftig. Den / regex / er forkortelse for en 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. Splitte filnavnet basert på skilletegn.
  2. Sjekk hver av delene.

Fordi en sortert liste kan du finne ut hvilke deler mangler, og hvis en seksjon ikke passer med noen mønster det er ugyldig. Her partsog patternshar en 1-1-forhold. To matriser i stedet for en ordbok håndhever ordren.

Ignorert og nødvendige filene kan være oppført. Den .og ..filer bør nok bli ignorert automatisk. Brukeren bør få lov til inngangs "klatter", som kan utvides skall. Jeg tenker her på svn:ignoreegenskaper, men globbing er naturlig for notering filer.

Her start_dirville være standard til gjeldende mappe, men hvis du ville ha en enkelt fil for å kjøre automatisert testing av en haug med kataloger dette ville være nyttig.

Den virkelige løse enden her er banen malen og langs de samme linjene hvilken vei er nødvendig for "gyldige filer". Jeg kunne ikke komme opp med en solid idé uten å skrive en stor regulære uttrykk og tar grupper fra det ... å bygge en mal. Det føltes mye som å skrive en Textmate språk grammatikk. Men det begynner å fjerne seg på brukervennlighet. Det virkelige problemet var at banen malen ikke var sammensatt av parts, noe som gir mening, men legger kompleksitet.

Er denne strategien i harmoni med hva du tenkte på?

Svarte 21/08/2008 kl. 22:02
kilden bruker

stemmer
0

kanskje du bør ta tilnærming for mislighold til: "filnavnet er riktig" og jobbe derfra å motbevise utsagnet:

med det faktum at du bare tillater filnavn med: 'show navn', 'sesong x episode nummer' og 'episode navn', vet du sikkert at disse elementene skal skilles med en "-" (bindestrek), så du må har to av dem for et filnavn for å være korrekt.
hvis det stemmer, kan du bruke koden din for å sjekke at showet navn samsvarer med showet navn som sett i foreldrenes overordnede mappen (case insensitive jeg antar), matcher sesong foreldrene mappen numerisk verdi (med eller uten en ekstra 0 foranstilte).

hvis men ser du ikke riktig mengde streker du umiddelbart vet at det er noe galt og stoppe før resten av testene osv

og separat kan du sjekke om filen folder.jpgfinnes, og ta de nødvendige tiltak. eller gjøre det først og filtrere filen fra resten av filene i mappen.

Svarte 21/08/2008 kl. 05:59
kilden bruker

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