Vra

Ek het'n klomp van die lêers (TV-episodes, maar dit is redelik arbitrêre) wat ek wil om te kyk ooreenstem met'n spesifieke benaming/organisasie skema..

Tans:Ek het drie skikkings van regex, een vir geldige lêername, een vir lêers ontbreek'n episode naam, en die een vir geldige paaie.

Dan, ek loop al elke geldig-lêernaam regex, as dit ooreenstem, voeg dit om'n "geldige" foutief, indien nie, doen dieselfde met die vermiste-ep-naam regexs, as dit ooreenstem met dit wat ek voeg dit om'n "ongeldige" foutief met'n fout kode (2:'ontbreek epsiode naam"), as dit ooreenstem nie, dit kry bygevoeg ongeldig met die "verkeerd naam" fout kode.

Die huidige kode kan gevind word hier

Ek wil by te voeg'n reël wat tjeks vir die teenwoordigheid van'n folder.jpg lêer in elke gids, maar om dit te voeg sou die kode aansienlik meer morsig in dit is die huidige toestand..

Hoe kon ek skryf hierdie stelsel in'n meer uitbreidbaar manier?

Die reëls is dit nodig om te kyk sou wees..

  • Lêer is in die formaat Show Name - [01x23] - Episode Name.avi of Show Name - [01xSpecial02] - Special Name.avi of Show Name - [01xExtra01] - Extra Name.avi
  • As lêernaam is in die formaat Show Name - [01x23].avi vertoon dit'n "ontbreek episode naam" afdeling van die uitset
  • Die pad moet word in die formaat Show Name/season 2/the_file.avi (waar seisoen 2 moet die korrekte seisoen nommer in die lêernaam)
  • elke Show Name/season 1/ die gids moet bevat "folder.jpg"

.enige idees?Terwyl ek probeer om te kyk TV-episodes, is hierdie konsep/kode moet in staat wees om aansoek te doen om baie dinge..

Die enigste gedagte wat ek gehad het, was'n lys van dicts in die formaat:

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
}
Was dit nuttig?

Oplossing

  

Ek wil 'n reël dat tjeks vir voeg   die teenwoordigheid van 'n folder.jpg lêer in   elke gids, maar om dit by te voeg sou   maak die kode aansienlik meer morsig   in dis huidige stand ..

Dit lyk nie sleg nie. Om die waarheid te jou huidige code doen dit baie mooi, en Sven genoem 'n goeie manier om dit te doen as goed:

  1. Kry 'n lys van al die lêers
  2. Gaan vir "vereiste" lêers

Jy sal net 'n lys het toe te voeg tot jou woordeboek van die vereiste lêers:

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

Sover daar 'n beter / extensible manier om dit te doen? Ek is nie presies seker nie. Ek kon net regtig dink aan 'n manier om die "verskeie" gereelde uitdrukkings moontlik te laat val en bou af van Sven se idee vir die gebruik van 'n delimiter. So my strategie sal die definisie van 'n woordeboek soos volg (en ek is jammer dat ek nie Python sintaksis weet en ek is 'n bietjie te lui om dit op te soek, maar dit moet sin maak. Die / regex / is snelskrif vir 'n 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. Verdeel die lêernaam gebaseer op die delimiter.
  2. Maak seker elkeen van die dele.

As gevolg van sy 'n geordende lys kan jy bepaal watter dele ontbreek en as 'n artikel geen patroon nie ooreenstem met dit is verkeerd. Hier is die parts en patterns het 'n 1 tot 1 verhouding. Twee skikkings in plaas van 'n woordeboek dwing die orde.

geïgnoreer en vereiste lêers kan gelys word. Die . en .. lêers moet waarskynlik outomaties geïgnoreer word nie. Die gebruiker moet toegelaat word om insette "globs" wat dop kan uitgebrei word. Ek dink hier van svn:ignore eienskappe, maar globbing is natuurlik vir notering lêers.

Hier start_dir sou versuim om die huidige gids, maar as jy 'n enkele lêer wou outomatiese toets van 'n klomp van die dopgehou loop sou hierdie nuttig wees.

Die ware los einde hier is die pad sjabloon en langs dieselfde lyne wat pad is wat nodig is vir 'n geldige lêers ". Ek kon regtig nie kom met 'n stewige idee sonder die skryf van 'n groot regular expression en neem groepe van dit ... om 'n sjabloon te bou. Dit het gevoel 'n baie soos die skryf van 'n TextMate grammatika. Maar dit begin om te dwaal op die gemak van gebruik. Die werklike probleem is dat die sjabloon pad is nie saamgestel uit parts, wat sin maak, maar voeg kompleksiteit.

Is hierdie strategie in harmonie met dit wat jy dink van?

Ander wenke

miskien moet jy neem die benadering van gebreke om te:"die lêernaam is korrek" en werk van daar af te weerlê dat die verklaring:

met die feit dat jy net toelaat dat lêername met:"wys die naam', 'seisoen aantal x episode aantal" en "episode naam", jy weet vir seker dat hierdie items moet geskei word deur'n "-" (dash) so jy het 2 van diegene vir'n lêernaam korrek te wees.
as dit tjeks uit, jy kan gebruik om jou kode om seker te maak dat die show naam ooreenstem met die show naam soos gesien in die ouer se ouer gids (geval onsensitief ek aanvaar), die seisoen die aantal ooreenstem met die ouers gids numeriese waarde (met of sonder'n ekstra 0 prepended).

as jy egter jy nie sien nie die korrekte bedrag van strepies jy dadelik weet dat daar is iets verkeerd en stop voor die res van die toetse ens.

en afsonderlik jy kan kyk as die lêer folder.jpg bestaan en neem die nodige stappe. of moenie dat eerste en filter dat die lêer van die res van die lêers in die gids.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top