Mam folder z podfolderami, które są we wzorze YYYYMMDDHHMMSS (znacznik czasu).Użyj Pythona Glob, aby znaleźć folder, który jest 14-cyfrowy numer
Chcę użyć globu, aby wybrać tylko foldery, które pasują do tego wzoru.
Mam folder z podfolderami, które są we wzorze YYYYMMDDHHMMSS (znacznik czasu).Użyj Pythona Glob, aby znaleźć folder, który jest 14-cyfrowy numer
Chcę użyć globu, aby wybrać tylko foldery, które pasują do tego wzoru.
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']
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
@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. –