[Tutor PyCZ] Akce nad soubory konkretniho typu v adresarovestrukture
Petr Prikryl
PrikrylP na skil.cz
Středa Květen 3 16:02:29 CEST 2006
dam
> [...] se nemuzu zbavit
> pocitu, ze by to melo jit lip (treba jen to vyhodnoceni, zda je soubor
> prislusneho typu celkem taha za oci). Takze spis namet na diskusi:
>
> import os
>
> def walkdir(folder):
> for root, dirs, files in os.walk(folder):
> for file in filter(lambda s: s.endswith('.tmp'), files):
> print root, ' - ', file
> akce(root + file)
>
> walkdir(dir)
Osobně bych se vyhnul použití filter() a lambda.
Python není funkcionální jazyk a nemusí to být
efektivní.
Doporučuji taky předávat cestu jako unicode
řetězec. V tom případě bude i os.walk() vracet
unicode řetězce.
------------------------------------
import os
def walkdir(folder):
for root, dirs, files in os.walk(folder):
for file in files:
if file.endswith('.tmp'):
print root, ' - ', file
#akce(root + file)
walkdir(u".")
------------------------------------
Jméno souboru by se taky dalo rozdělit přes
name, ext = os.path.splitext(file)
ext pak případně převést na malá písmena
(pod Windows, kde se na malá a velká nehraje)
a otestovat na předem definovanou množinu přípon:
------------------------------------
import os
def walkdir(folder):
extensions = set(['.tmp', '.~', '.bak'])
for root, dirs, files in os.walk(folder):
for file in files:
name, ext = os.path.splitext(file)
if ext in extensions:
print root, ' - ', file
#akce(root + file)
walkdir(u".")
------------------------------------
pepr
Další informace o konferenci Tutor