我试图在不知道文件名的情况下逐个处理目录中的一些文件。 所以我使用
os.listdir(path)
来列出文件。
所以我必须在每次调用函数时列出文件。问题是当有很多文件(比如 2000 个)时,列出每个文件需要很长的时间,而我只想要第一个。
是否有任何解决方案可以在不列出每个文件的情况下获取名字?
os.listdir(path)[0]
它比“列出”(打印?)每个文件名更快,但它仍然需要将所有文件名加载到内存中。另外,哪个文件是第一个文件,您只想要第一个文件还是有一个特定的文件,因为这是不同的。
如果您的目标是处理每个文件名,请使用 os.walk() 生成器:
Help on function walk in module os:
walk(top, topdown=True, onerror=None, followlinks=False)
Directory tree generator.
您似乎正在尝试批量处理文件,并且您将在某个时刻迭代所有文件。与其每次输入函数时都调用该方法,为什么不使用全局参数以便只加载列表一次呢?因此,例如,而不是:
import os
def foo(path):
os.listdir(path)[0]
你有:
import os
fnames = os.listdir(path)
def foo(path):
fnames[0]
要获取第一个文件名而不需要扫描整个目录,您必须使用 walk 函数来获取生成器,然后您可以使用 next() 来获取生成器的第一个值。
folder_walk = os.walk(path)
first_file_in_folder = next(folder_walk)[2][0]
print(first_file_in_folder)
# "firstFile.jpg"
python 2.7:
import os
def get_first_file_path(path):
first_file_path = None
for root, dirs, files in os.walk(path):
if len(files) > 0:
first_file_path = os.path.join(root, files[0])
break
return first_file_path
对于那些来这里寻找解决方案以获取目录中第一个文件的人,请使用
pathlib
import pathlib
my_dir = pathlib.Path("my/dir/")
first_file = next((x for x in my_dir.iterdir() if x.is_file()), None)