使用Python查找大文件的更快方法? - python

我正在尝试使用Python寻找一种更快的方法来筛选包含大约9个其他目录的大目录(大约1.1TB),并查找大于200GB或类似文件的文件,这些文件必须在多个linux服务器上使用,蟒蛇。

我已经尝试了很多事情,例如使用脚本调用du -h,但是du太慢以至于无法通过一个1TB的目录。
我也尝试过像find ./ + 200G之类的find命令,但这也将成为永远。

我也尝试过os.walk()和做.getsize(),但这是同样的问题-太慢了。
所有这些方法都需要花费数小时和数小时的时间,如果有人能够帮助我,我需要寻求其他解决方案的帮助。因为我不仅需要在一台服务器上搜索大文件,而且还必须通过SSH切换近300台服务器并输出所有大于200GB的文件的庞大列表,而我尝试过的三种方法不会能够做到这一点。
任何帮助表示赞赏,谢谢!

参考方案

这是不对的,您做不到os.walk()

据说scandir快2到20倍。

来自https://pypi.python.org/pypi/scandir

  Python的内置os.walk()速度明显慢于所需速度,因为–除了在每个目录上调用listdir()之外,它还在每个文件上调用stat()以确定文件名是否为目录。但是Windows上的FindFirstFile / FindNextFile和Linux / OS X上的readdir都已经告诉您返回的文件是否是目录,因此不需要进一步的stat系统调用。简而言之,您可以将系统调用的数量从大约2N减少到N,其中N是树中文件和目录的总数。
  
  实际上,删除所有这些额外的系统调用可使os.walk()在Windows上的运行速度约为7-50倍,而在Linux和Mac OS X上的运行速度约为3-10倍。因此,我们并不是在谈论微优化。 。

从python 3.5开始,由于PEP 471,scandir现在是内置的,在os包中提供。小(未试用)示例:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(当然您有时需要stat,但是使用os.walk时,使用该函数时会隐式调用stat。同样,如果文件具有某些特定的扩展名,则只有在扩展名匹配时才可以执行stat,保存更)

还有更多的东西:

  因此,除了提供用于直接调用的scandir()迭代器函数外,Python的现有os.walk()函数还可以大大提高速度。

因此,迁移到Python 3.5+可以神奇地加快os.walk的速度,而无需重写代码。

根据我的经验,在网络驱动器上增加stat调用会带来灾难性的性能,因此,如果目标是网络驱动器,则与本地磁盘用户相比,您将从此增强功能中受益更多。

但是,获得网络驱动器性能的最佳方法是在本地安装驱动器的计算机上运行扫描工具(例如,使用ssh)。它不太方便,但是值得。

python:ConfigParser对象,然后再阅读一次 - python

场景:我有一个配置文件,其中包含要执行的自动化测试的列表。这些测试是长期循环执行的。   配置文件的设计方式使ConfigParser可以读取它。由于有两个三个参数,因此我需要通过每个测试。现在,此配置文件由script(s1)调用,并且按照配置文件中的列表执行测试。Script(s1)第一次读取配置,并且在每次测试完成后都会执行。阅读两次的要求:由于可能会…

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

如何从python向终端(linux)发送多个命令? - python

我想向Linux终端发送命令以运行python脚本。我有一个要运行的python文件列表,当我们顺序阅读该列表时,我想一个接一个地运行它们。第一个文件完成后,应发送第二个文件以运行,依此类推。 参考方案 您可以使用以下命令顺序运行脚本:python script1.py && python script2.py && pyth…