我需要遍历给定目录中的所有.asm文件,并对它们执行一些操作。
如何以有效的方式做到这一点?
我需要遍历给定目录中的所有.asm文件,并对它们执行一些操作。
如何以有效的方式做到这一点?
当前回答
通过执行此操作,获取目录中的所有.asm文件。
import os
path = "path_to_file"
file_type = '.asm'
for filename in os.listdir(path=path):
if filename.endswith(file_type):
print(filename)
print(f"{path}/{filename}")
# do something below
其他回答
我对这个实现还不太满意,我希望有一个自定义构造函数来实现DirectoryIndex_make(next(os.walk(inputpath))),这样您就可以传递文件列表所需的路径。欢迎编辑!
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)
Python 3.6版本的上述答案,使用os-假设您将目录路径作为变量directory_in_str中的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)
使用rglob将glob('**/*.asm')替换为rglob('*.asm])这类似于调用Path.glob(),在给定的相对模式前面添加了“**/”:
from pathlib import Path
pathlist = Path(directory_in_str).rglob('*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
原答覆:
import os
for filename in os.listdir("/path/to/dir/"):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
这将遍历所有子代文件,而不仅仅是目录的直接子代:
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
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)
我非常喜欢使用内置在os库中的scandir指令。下面是一个工作示例:
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.")