【问题标题】:How to get file names in a directory one-by-one? [duplicate]如何一一获取目录中的文件名? [复制]
【发布时间】:2020-02-03 11:34:12
【问题描述】:

我有一个目录,其中包含超过 10 万个文件。我需要遍历它们并执行操作。我不想将整个文件列表加载到内存中,而不是那样,我想同步遍历。在 Python 中实现这一目标的最佳方法是什么?

编辑:

这个question 与我的问题不同,因为我不想一次将所有文件名加载到内存中。

【问题讨论】:

  • @MauriceMeyer 不,我的问题不同。请查看我的编辑。

标签: python file operating-system filesystems


【解决方案1】:

Pathlib.iterdir() 提供了一个生成器来遍历目录,从而减少内存消耗:

import sys
import pathlib
import os

path = '/cache/srtm'
pl = pathlib.Path(path).iterdir()
oslb = os.listdir(path)
print(type(pl))
print (type(oslb))

print ('pathlib.iter: %s' % sys.getsizeof(pl))
print ('os.listdir: %s' % sys.getsizeof(oslb))

打印:

<class 'generator'>
<class 'list'>
pathlib.iter: 88
os.listdir: 124920

【讨论】:

    【解决方案2】:

    假设您在名为 myDirectory 的变量中有一个目录路径作为 str 对象,这就是您将循环遍历目录中的文件列表的方式

    import os
    
    directory = os.fsencode(myDirectory)
    
    for file in os.listdir(directory):
         filename = os.fsdecode(file)
         # do opperations with filename
    

    或者你可以使用 pathlib

    from pathlib import Path
    
    pathlist = Path(myDirectory)
    for path in pathlist:
     filename = str(path)
     # Do opperations with filename
    

    【讨论】:

    • 谢谢,但您确定它不会一次将所有 100K 文件名加载到内存中吗?
    • 类 pathlib 是常用的,我确信它经过优化不会浪费内存,但是,为了节省,我建议在运行此代码时检查你的内存使用情况,看看如何它增加了很多。我不知道有任何其他方式不会将所有内容加载到内存中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多