我正在尝试处理目录中的某些文件,而不知道他们的名字,并逐个处理。
所以我使用os.listdir(path)
列出文件。
所以我必须在每次调用函数时列出文件。问题是当有很多文件(如2000)时,列出每个文件需要花费很多时间,而我只想要第一个文件。
是否有任何解决方案可以在不列出每个文件的情况下获取名字?
谢谢:)
答案 0 :(得分:9)
os.listdir(path)[0]
这比列出'更快。 (打印?)每个文件名,但它仍然必须将所有文件名加载到内存中。另外,哪个文件是第一个文件,你只想要第一个文件或者你想要的特定文件,因为这是不同的。
答案 1 :(得分:3)
如果您的目标是处理每个文件名,请使用os.walk()生成器:
Help on function walk in module os:
walk(top, topdown=True, onerror=None, followlinks=False)
Directory tree generator.
答案 2 :(得分:2)
您似乎正在尝试整体处理文件,并且您将在某个时刻迭代所有文件。您不必每次输入函数时都调用该方法,为什么不使用全局参数,以便只加载一次列表?因此,例如,而不是:
import os
def foo(path):
os.listdir(path)[0]
你有:
import os
fnames = os.listdir(path)
def foo(path):
fnames[0]
答案 3 :(得分:0)
要获取第一个文件名而不必扫描整个目录,您必须使用 walk 函数获取生成器,然后您可以使用 next() 获取生成器的第一个值。
folder_walk = os.walk(path)
first_file_in_folder = next(folder_walk)[2][0]
print(first_file_in_folder)
# "firstFile.jpg"