重写os.walk以返回生成器对象作为第三项
作者:互联网
在检查os.walk的效率时,我使用字符串Hello< number>创建了6,00,000个文件. (其中number只是一个数字,指示目录中文件的编号),例如目录中文件的内容如下所示:-
File Name | Contents
1.txt | Hello 1
2.txt | Hello 2
.
.
600000.txt|Hello 600000
现在,我运行以下代码:
a= os.walk(os.path.join(os.getcwd(),'too_many_same_type_files')) ## Here, I am just passing the actual path where those 6,00,000 txt files are present
print a.next()
我感到的问题是a.next()占用了太多的时间和内存,因为a.next()返回的第三个项目是目录中的文件列表(有600万个项目).因此,我试图找到一种方法(至少)是通过某种方式使a.next()返回生成器对象作为元组的第3项(而不是文件名列表)来降低空间复杂度的方法.
降低空间复杂度是否是一个好主意?
解决方法:
正如人们已经提到的那样,目录中有600,000个文件是一个坏主意.最初,我认为确实没有办法执行此操作,因为您可以访问文件列表,但是事实证明我错了.您可以使用以下步骤来实现所需的目标:
>使用子进程或os.system调用ls或dir(无论您碰巧使用哪种操作系统).将命令的输出定向到一个临时文件(例如/ tmp / myfiles或其他内容.在Python中,有一个模块可以为您返回新的tmp文件).
>打开该文件以用Python读取.
>文件对象是可迭代的,并且将返回每一行,因此只要您只有文件名,就可以了.
标签:os-walk,python 来源: https://codeday.me/bug/20191127/2076823.html