2010-04-22 3 views

Odpowiedz

12

Ponieważ glob nie obsługuje wyrażeń regularnych, będziesz musiał brutalnie wymusić tworzenie ciągu dopasowania. Jednym ze sposobów jest wykorzystanie faktu, że postać waha się w [] są rozszerzone:

C:\temp\py>mkdir 123456789

C:\temp\py>C:\Python26\python.exe 
Python 2.6.2 Stackless 3.1b3 060516 (release26-maint, Apr 14 2009, 21:19:36) [M 
C v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import glob 
>>> glob.glob('./' + ('[0-9]' * 14)) 
['.\\123456789'] 
>>> 

Skorzystałem z tego, że w Pythonie, mnożąc ciąg z całkowitą n skutkuje tym ciągiem powtarza n razy.

Oczywiście, można iść do przodu i umieścić w kontroli w celu sprawdzenia, że ​​dana ścieżka jest w rzeczywistości katalogu:

>>> [path for path in glob.iglob('./' + ('[0-9]' * 14))] 
['.\\11223344556677', '.\\123456789'] 
>>> [path for path in glob.iglob('./' + ('[0-9]' * 14)) if os.path.isdir(path)] 
['.\\123456789'] 
+0

Dzięki za odpowiedź. Na razie używałem tego: [0-9] [0-9] [0-9] [0-9] [0-1] [0-9] [0-3] [0-9] [ 0-2] [0-9] [0-2] [0-9] [0-6] [0-9] Co zasadniczo ma zasady dla formatu, który opisałem (ograniczenie miesięcy, dni, godzin minut do ich zakresy), po prostu nie byłem pewien, czy jest lepszy sposób na zrobienie tego. – mikec

+7

@mikec: Być może łatwiej będzie trzymać się '' [0-9] '* 14', a następnie akceptować tylko znaczniki czasu, które można pomyślnie przetworzyć za pomocą 'datetime.strptime', jeśli * naprawdę * musisz zapewnić, że wszystkie znaczniki czasu są ważne. –