[python] 파이썬은 여러 파일 형식을 가져옵니다

python에서 glob.glob를 사용하여 .txt, .mdown 및 .markdown과 같은 여러 파일 유형 목록을 얻는 더 좋은 방법이 있습니까? 지금 나는 이와 같은 것을 가지고있다 :

projectFiles1 = glob.glob( os.path.join(projectDir, '*.txt') )
projectFiles2 = glob.glob( os.path.join(projectDir, '*.mdown') )
projectFiles3 = glob.glob( os.path.join(projectDir, '*.markdown') )



답변

더 좋은 방법이 있지만 어떻습니까?

import glob
types = ('*.pdf', '*.cpp') # the tuple of file types
files_grabbed = []
for files in types:
    files_grabbed.extend(glob.glob(files))

# files_grabbed is the list of pdf and cpp files

다른 방법이있을 수 있으므로 다른 사람이 더 나은 답변을 얻을 수 있도록 기다립니다.


답변

from glob import glob

files = glob('*.gif')
files.extend(glob('*.png'))
files.extend(glob('*.jpg'))

print(files)

경로를 지정해야하는 경우 일치 패턴을 반복하고 단순성을 위해 루프 내부의 결합을 유지하십시오.

from os.path import join
from glob import glob

files = []
for ext in ('*.gif', '*.png', '*.jpg'):
   files.extend(glob(join("path/to/dir", ext)))

print(files)


답변

glob 리스트를 반환합니다. 왜 여러 번 실행하고 결과를 연결하지 않습니까?

from glob import glob
ProjectFiles = glob('*.txt') + glob('*.mdown') + glob('*markdown')


답변

결과를 연결하십시오 :

import itertools as it, glob

def multiple_file_types(*patterns):
    return it.chain.from_iterable(glob.iglob(pattern) for pattern in patterns)

그때:

for filename in multiple_file_types("*.txt", "*.sql", "*.log"):
    # do stuff


답변

확장 프로그램 수만큼 여러 번 globbing을 제안하는 많은 답변을 대신 한 번만 globbing을 선호합니다.

from pathlib import Path

files = {p.resolve() for p in Path(path).glob("**/*") if p.suffix in [".c", ".cc", ".cpp", ".hxx", ".h"]}


답변

glob으로는 불가능합니다. 당신은 다음을 사용할 수 있습니다 :
* 모든 것과 일치
합니까? 모든 단일 문자와 일치
[seq] seq의 모든 문자와 일치
[! seq]는 seq에없는 모든 문자와 일치

os.listdir 및 regexp를 사용하여 패턴을 확인하십시오.

for x in os.listdir('.'):
  if re.match('.*\.txt|.*\.sql', x):
    print x


답변

예를 들어, 위해 *.mp3*.flac여러 폴더에, 당신은 할 수 있습니다 :

mask = r'music/*/*.[mf][pl][3a]*'
glob.glob(mask)

이 아이디어는 더 많은 파일 확장자로 확장 될 수 있지만 그 조합이 해당 폴더에있는 다른 원치 않는 파일 확장자와 일치하지 않는지 확인해야합니다. 따라서 조심 하십시오.

임의의 확장자 목록을 단일 glob 패턴으로 자동 결합하려면 다음을 수행하십시오.

mask_base = r'music/*/*.'
exts = ['mp3', 'flac', 'wma']
chars = ''.join('[{}]'.format(''.join(set(c))) for c in zip(*exts))
mask = mask_base + chars + ('*' if len(set(len(e) for e in exts)) > 1 else '')
print(mask)  # music/*/*.[fmw][plm][3a]*