[python] 주어진 디렉토리에있는 파일들을 어떻게 반복 할 수 있습니까?

.asm주어진 디렉토리 내의 모든 파일 을 반복 하고 그에 대한 조치를 취해야합니다.

어떻게 효율적으로 할 수 있습니까?



답변

원래 답변 :

import os

for filename in os.listdir(directory):
    if filename.endswith(".asm") or filename.endswith(".py"):
         # print(os.path.join(directory, filename))
        continue
    else:
        continue

위의 답변의 Python 3.6 버전은 다음과 같은 변수에 객체 os로 디렉토리 경로가 있다고 가정합니다 .strdirectory_in_str

import os

directory = os.fsencode(directory_in_str)

for file in os.listdir(directory):
     filename = os.fsdecode(file)
     if filename.endswith(".asm") or filename.endswith(".py"):
         # print(os.path.join(directory, filename))
         continue
     else:
         continue

또는 반복적으로 사용 pathlib:

from pathlib import Path

pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
     # because path is object not string
     path_in_str = str(path)
     # print(path_in_str)


답변

이것은 디렉토리의 직계 자식뿐만 아니라 모든 자손 파일을 반복합니다.

import os

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        #print os.path.join(subdir, file)
        filepath = subdir + os.sep + file

        if filepath.endswith(".asm"):
            print (filepath)


답변

glob 모듈을 사용해보십시오 .

import glob

for filepath in glob.iglob('my_dir/*.asm'):
    print(filepath)

Python 3.5부터 하위 디렉토리도 검색 할 수 있습니다.

glob.glob('**/*.txt', recursive=True) # => ['2.txt', 'sub/3.txt']

문서에서 :

glob 모듈은 결과가 임의의 순서로 리턴되지만 Unix 쉘이 사용하는 규칙에 따라 지정된 패턴과 일치하는 모든 경로 이름을 찾습니다. 물결표 확장은 수행되지 않지만 []로 표시되는 *,? 및 문자 범위는 올바르게 일치합니다.


답변

Python 3.5부터 os.scandir ( )을 사용하면 작업이 훨씬 쉬워집니다.

with os.scandir(path) as it:
    for entry in it:
        if entry.name.endswith(".asm") and entry.is_file():
            print(entry.name, entry.path)

os.DirEntry 객체는 디렉토리를 스캔 할 때 운영 체제에서 정보를 제공 할 경우이 정보를 노출하므로 listdir () 대신 scandir ()을 사용하면 파일 유형 또는 파일 속성 정보가 필요한 코드의 성능이 크게 향상 될 수 있습니다. 모든 os.DirEntry 메소드는 시스템 호출을 수행 할 수 있지만 is_dir () 및 is_file ()은 일반적으로 기호 링크에 대한 시스템 호출 만 필요합니다. os.DirEntry.stat ()는 항상 Unix에서 시스템 호출이 필요하지만 Windows에서는 기호 링크에 대한 호출 만 필요합니다.


답변

Python 3.4 이상 은 표준 라이브러리에서 pathlib 를 제공 합니다. 당신은 할 수 있습니다 :

from pathlib import Path

asm_pths = [pth for pth in Path.cwd().iterdir()
            if pth.suffix == '.asm']

또는 목록 이해가 마음에 들지 않는 경우 :

asm_paths = []
for pth in Path.cwd().iterdir():
    if pth.suffix == '.asm':
        asm_pths.append(pth)

Path 객체를 쉽게 문자열로 변환 할 수 있습니다.


답변

파이썬에서 파일을 반복하는 방법은 다음과 같습니다.

import os

path = 'the/name/of/your/path'

folder = os.fsencode(path)

filenames = []

for file in os.listdir(folder):
    filename = os.fsdecode(file)
    if filename.endswith( ('.jpeg', '.png', '.gif') ): # whatever file types you're using...
        filenames.append(filename)

filenames.sort() # now you have the filenames and can do something with them

이 기술 중 어느 것도 보증 명령을 보증하지 않습니다

예, 예측할 수 없습니다. 파일 이름을 정렬합니다. 파일 순서가 중요 할 경우 (예 : 비디오 프레임 또는 시간 종속 데이터 수집) 중요합니다. 그래도 파일 이름에 색인을 넣으십시오!


답변

디렉토리와 목록을 참조하기 위해 glob 을 사용할 수 있습니다 .

import glob
import os

#to get the current working directory name
cwd = os.getcwd()
#Load the images from images folder.
for f in glob.glob('images\*.jpg'):
    dir_name = get_dir_name(f)
    image_file_name = dir_name + '.jpg'
    #To print the file name with path (path will be in string)
    print (image_file_name)

배열의 모든 디렉토리 목록을 얻으려면 os 를 사용할 수 있습니다 :

os.listdir(directory)