.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
로 디렉토리 경로가 있다고 가정합니다 .str
directory_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)