[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