其他分享
首页 > 其他分享> > 重写os.walk以返回生成器对象作为第三项

重写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