PDA

Pogčedajte punu verziju : python ignore_patterns


cvele
23. 02. 2011., 10:05
Metod shutil.copytree (http://docs.python.org/library/shutil.html#shutil.copytree) kao cetvrti parametar prihvata listu fajlova koji se ignorisu. Predlog/primer na koji nailazim je da se koristi shutil.ignore_patterns (http://docs.python.org/library/shutil.html#shutil.ignore_patterns). Nazalost ta funkcija kao pattern prihvata samo listu u stilu '*.mp3', '*.wav' isl.
Ono sto mene zanima je kako bi mogao da umesto tog patterna iskoristim regexp izraz?

djipko
23. 02. 2011., 10:56
Mislim da u tom slucaju ne mozes da koritis factory funkciju nego moras da napises svoju funkciju. Ako sam dobro razumeo kako radi shutil.copytree to ne bi trebalo da bude jako tesko, nesto tipa.


def my_ignore(dir_name, dir_list):
my_re = re.compile('^.*$')
return [l for l in dir_list if my_re.match(l)]


Ali naravno nisam probao da li radi.

jablan
23. 02. 2011., 10:57
Pa ignore parametar ti je callable, samo mu prosledi svoju funkciju koja radi regexp nad listom fajlova.

//edit: ^ what he said :)

djipko
23. 02. 2011., 11:01
A ako ne koristis kompajlirani RE moze i smekerskije sa lambdom da se odradi :)

jablan
23. 02. 2011., 11:29
Trebalo bi da može nešto ovako (dobrim delom iskopiran djipkov kod):


def ignore_regex(my_re):
def my_ignore(dir_name, dir_list):
return [l for l in dir_list if my_re.match(l)]
return my_ignore


što onda koristiš umesto shutil.ignore_patterns (samo mu proslediš regex).

djipko
23. 02. 2011., 11:36
Bas sam ja hteo sada da napisem da bi "najpajtonskije" i u duhu func programiranja bilo ustvari da napises svoj factory koji vraca funkciju ali pretece me jablan.