zoukankan      html  css  js  c++  java
  • 遍历文件总结

    1.遍历主要用到os模块的walk和listdir两个模块。查看os源码不难发现,使用os.walk将返回遍历目录的路径,文件夹名,与文件名。listdir方法以list的数据结构返回文件名

    2.源码分享,主要形式为三种.

    import collections
    import subprocess
    import platform
    import os
    
    
    # 获取指定目录下,指定格式的文件,  Usage:get_all_files('/Case', '.yaml')
    def get_all_files(root: str, pattern: str)-> dict:
        extension_file = collections.OrderedDict()
        for root, dirs, files in os.walk(root):
            for filename in files:
                if filename.endswith(pattern):
                    path = os.path.join(root, filename).replace('\', '/')
                    extension_file[filename] = path
        return extension_file
    
    
    # TODO:递归遍历指定目录,只获取文件名,待优化
    def iter_files(path):
    
        filename = []
    
        def iterate_files(path):
    
            path_rest = path if not isinstance(path, bytes) else path.decode()
            abspath = os.path.abspath(path_rest)
    
            try:
                all_files = os.listdir(abspath)
                for items in all_files:
                    files = os.path.join(path, items)
                    if os.path.isfile(files):
                        filename.append(files)
                    else:
                        iterate_files(files)
            except (FileNotFoundError, AttributeError, BytesWarning, IOError, FileExistsError):
                pass
        iterate_files(path)
        return filename
    
    
    # 调用subprocess.Popen创建进程,通过subprocess.PIPE与之交互
    # 目录结构过于复杂,会造成通信阻塞
    def files_progress(pattern):
        system, files = platform.system(), []
        if system is 'Windows':
            view_file_command = 'dir'
        else:
            view_file_command = "find {0}".format(pattern)
    
        p = subprocess.Popen(view_file_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        for line in p.stdout.readlines():
            if not isinstance(line, str):
                format_line = str(line.decode('gbk'))
                if system is 'Windows':
                    if format_line.strip().endswith(pattern):
                        files.append([content for content in format_line.split() if content.endswith(pattern)][0])
                else:
                    files.append(line)
        return files if p.wait() == 0 else None
  • 相关阅读:
    MT7601 AP模式移植
    dhcp server 移植记录
    MT7601 WG209模块驱动移植,并连接路由器
    git 忽略文件
    关于中文--Unicode之间互相转换流程的说明
    将文字拆成拼音得到首字母(返回多音字)
    Javascript 汉字转首字母的拼音 js文件(支持多音字的选择)
    如何使用netstat –ano|findstr “port”命令?
    notepad++如何修改主题
    Notepad++ 更换主题
  • 原文地址:https://www.cnblogs.com/xiaoxiaolulu/p/9475120.html
Copyright © 2011-2022 走看看