如何选择目录中的第一个文件?

问题描述 投票:0回答:6

我试图在不知道文件名的情况下逐个处理目录中的一些文件。 所以我使用

os.listdir(path)
来列出文件。

所以我必须在每次调用函数时列出文件。问题是当有很多文件(比如 2000 个)时,列出每个文件需要很长的时间,而我只想要第一个。

是否有任何解决方案可以在不列出每个文件的情况下获取名字?

python file
6个回答
26
投票
os.listdir(path)[0]

它比“列出”(打印?)每个文件名更快,但它仍然需要将所有文件名加载到内存中。另外,哪个文件是第一个文件,您只想要第一个文件还是有一个特定的文件,因为这是不同的。


8
投票

如果您的目标是处理每个文件名,请使用 os.walk() 生成器:

Help on function walk in module os:

walk(top, topdown=True, onerror=None, followlinks=False)
    Directory tree generator.

7
投票

您似乎正在尝试批量处理文件,并且您将在某个时刻迭代所有文件。与其每次输入函数时都调用该方法,为什么不使用全局参数以便只加载列表一次呢?因此,例如,而不是:

import os
def foo(path):
    os.listdir(path)[0]

你有:

import os
fnames = os.listdir(path)
def foo(path):
    fnames[0]

2
投票

要获取第一个文件名而不需要扫描整个目录,您必须使用 walk 函数来获取生成器,然后您可以使用 next() 来获取生成器的第一个值。

folder_walk = os.walk(path)
first_file_in_folder = next(folder_walk)[2][0]

print(first_file_in_folder)
# "firstFile.jpg"

0
投票

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

0
投票

对于那些来这里寻找解决方案以获取目录中第一个文件的人,请使用

pathlib

import pathlib

my_dir = pathlib.Path("my/dir/")
first_file = next((x for x in my_dir.iterdir() if x.is_file()), None)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.