답변:
원래 답변 :
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)
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
print(os.path.join(directory, filename))
print(os.path.join(directory_in_str, filename))
파이썬 3.6에서 작동 하도록 변경해야합니다.
for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
에if filename.endswith(".asm") or filename.endswith(".py"):
이것은 디렉토리의 직계 자식뿐만 아니라 모든 자손 파일을 반복합니다.
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
이 기술 중 어느 것도 보증 명령을 보증하지 않습니다
예, 예측할 수 없습니다. 파일 이름을 정렬합니다. 파일 순서가 중요 할 경우 (예 : 비디오 프레임 또는 시간 종속 데이터 수집) 중요합니다. 그래도 파일 이름에 색인을 넣으십시오!
from pkg_resources import parse_version
그리고 filenames.sort(key=parse_version)
그것을했다.
디렉토리와 목록을 참조하기 위해 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)
나는이 구현에 아직 만족하지 않지만 DirectoryIndex._make(next(os.walk(input_path)))
파일 목록을 원하는 경로를 전달할 수 있는 사용자 지정 생성자 를 원했습니다. 환영합니다!
import collections
import os
DirectoryIndex = collections.namedtuple('DirectoryIndex', ['root', 'dirs', 'files'])
for file_name in DirectoryIndex(*next(os.walk('.'))).files:
file_path = os.path.join(path, file_name)
라이브러리에 scandir
내장 된 지시문을 사용하는 것이 정말 os
좋습니다. 다음은 실제 예입니다.
import os
i = 0
with os.scandir('/usr/local/bin') as root_dir:
for path in root_dir:
if path.is_file():
i += 1
print(f"Full path is: {path} and just the name is: {path.name}")
print(f"{i} files scanned successfully.")