나는 정규식에 적용되는 파일 목록을 얻고 싶습니다. os.walk를 사용해야한다고 생각하지만, 정규 표현식으로 어떻게 사용할 수 있습니까?os.walk with regex
감사합니다.
나는 정규식에 적용되는 파일 목록을 얻고 싶습니다. os.walk를 사용해야한다고 생각하지만, 정규 표현식으로 어떻게 사용할 수 있습니까?os.walk with regex
감사합니다.
정규 표현식을 foo/*.txt
과 같은 쉘 표현식으로 변환 할 수 있다면 glob
을 사용할 수 있습니다.
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
나는이를 구현하는 다음 stdlib에서 아무것도 잘 모르는 것 같아요,하지만 코드에 하드되지 않습니다 :
import os, os.path
def iter_matching(dirpath, regexp):
"""Generator yielding all files under `dirpath` whose absolute path
matches the regular expression `regexp`.
Usage:
>>> for filename in iter_matching('/', r'/home.*\.bak'):
.... # do something
"""
for dir_, dirnames, filenames in os.walk(dirpath):
for filename in filenames:
abspath = os.path.join(dir_, filename)
if regexp.match(abspath):
yield abspath
또는 더 일반적인 :
import os, os.path
def filter_filenames(dirpath, predicate):
"""Usage:
>>> for filename in filter_filenames('/', re.compile(r'/home.*\.bak').match):
.... # do something
"""
for dir_, dirnames, filenames in os.walk(dirpath):
for filename in filenames:
abspath = os.path.join(dir_, filename)
if predicate(abspath):
yield abspath
몇 가지 코드를 게시하시기 바랍니다 당신이 사용하려고 시도한 것입니다. 오류 메시지를 포함하여 제안 된 솔루션을 게시하십시오. 이것은 'www.do-my-job-for-me.com'이 아닙니다. –