zoukankan      html  css  js  c++  java
  • 【笔记】:高性能从目录中获取文件

    Python获取文件名的方法性能对比

    前言:平常在python中从文件夹中获取文件名的简单方法   os.system('ll /data/')   但是当文件夹中含有巨量文件时,这种方式完全是行不通的;

     

    在/dd目录中生成了近6百万个文件,接下来看看不同方法之间的性能对比  快速生成文件的shell脚本  

    for i in $(seq 1 1000000);do echo text >>$i.txt;done
    

      

     1、系统命令 ls -l

    # 系统命令 ls -l
    
    import time
    import subprocess
    
    start = time.time()
    result = subprocess.Popen('ls -l /dd/', stdout=subprocess.PIPE,shell=True)
    
    for file in result.stdout:
        pass
    print(time.time()-start)
    
    # 直接卡死
    

      

    2、glob 模块

    # glob 模块
    
    import glob
    import time
    
    
    start = time.time()
    result = glob.glob("/dd/*")
    for file in result:
        pass
    print(time.time()-start)
    
    # 49.60481119155884
    

      

    3、os.walk 模块

    # os.walk 模块
    
    import os
    import time
    
    start = time.time()
    for root, dirs, files in os.walk("/dd/", topdown=False):
            pass
    print(time.time()-start)
    
    # 8.906772375106812
    

      

    4、os.scandir 模块

    # os.scandir 模块
    
    import os
    import time
    
    start = time.time()
    path = os.scandir("/dd/")
    for i in path:
        pass
    print(time.time()-start)
    
    # 4.118424415588379
    

      

    5、shell find命令

    # shell find命令
    
    import time
    import subprocess
    
    start = time.time()
    result = subprocess.Popen('find /dd/', stdout=subprocess.PIPE,shell=True)
    
    for file in result.stdout:
        pass
    print(time.time()-start)
    
    # 6.205533027648926
    

      

    6、shell ls -1 -f 命令 不进行排序

    # shell ls -1  -f 命令
    
    import time
    import subprocess
    
    start = time.time()
    result = subprocess.Popen('ls -1 -f /dd/', stdout=subprocess.PIPE,shell=True)
    
    for file in result.stdout:
        pass
    print(time.time()-start)
    
    # 3.3476643562316895
    

      

    7、os.listdir

    # os.listdir
    
    import os
    import time
    
    
    start = time.time()
    result = os.listdir('/dd')
    for file in result:
        pass
    print(time.time()-start)
    
    # 2.6720399856567383
    

      

  • 相关阅读:
    php.ini中设置session过期时间
    IP(Internet Protocal) 地址 说明
    html年月日下拉联动菜单 年月日三下拉框联动
    使用数组的键值,做为变量名的方法
    html中js只允许输入数字
    阿里云服务器问题攻略
    小帆远行
    Android图片转换类 1. Bitmap去色,转换为黑白的灰度图, 2. Bitmap图片加圆角效果
    EditText禁止输入回车
    Android之系统自带的文字外观设置
  • 原文地址:https://www.cnblogs.com/lianzhilei/p/10554567.html
Copyright © 2011-2022 走看看