我正在尝试从特定目录的不同子目录中获取前50个.jpg文件。直到现在,我只使用以下命令列表获取所有路径名称:
import os
import os.path
for dirpath, dirnames, filenames in os.walk("."):
for filename in [f for f in filenames if f.endswith(".jpg")]:
print os.path.join(dirpath, filename)
有人可以告诉我们如何仅从子目录中提取前50个文件吗?
答案 0 :(得分:0)
获取列表理解的第一个n
值。如果您只想在split
上使用文件名/
并取最后一个元素:
import os
import os.path
n = 50
fext = ".jpg"
for dirpath, dirnames, filenames in os.walk("."):
for filename in [f for f in filenames if f.endswith(fext)][:n]:
print (filename)
答案 1 :(得分:0)
使用os.listdir
列出文件和目录。
使用os.path.isdir
获取目录。
以下代码获取每个子目录中50个.jpg文件的完整路径。
target_dir = os.path.abspath('.')
sub_dir_list = [os.path.join(target_dir, one_dir) for one_dir in os.listdir(target_dir) if
os.path.isdir(os.path.join(target_dir, one_dir))]
img_file_list = []
for sub_dir in sub_dir_list:
img_file_list.extend([one_file for one_file in os.listdir(sub_dir) if one_file.endswith('.jpg')][:50])
答案 2 :(得分:0)
最好的方法是避免
list
理解[:50]
创建2个无用的列表,而不是那个高效的。
我建议使用生成器理解而不是列表理解来生成名称,并在其上使用islice
。就像那样,没有创建临时列表。一次只能使用1个值:
import itertools,os
for dirpath, dirnames, filenames in os.walk("."):
for filename in itertools.islice((f for f in filenames if f.endswith(".jpg")),50):
print(os.path.join(dirpath, filename))
也要小心:一些奇怪的文件系统不一定按名称排序文件,也许你需要先对列表进行排序,然后切片。
for filename in itertools.islice(sorted([f for f in filenames if f.endswith(".jpg")]),50):