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
  • 相关阅读:
    pdf 转图片,提取图片研究心得
    自己总结 C++ 代码规范
    Sublime Text 配置记录
    iOS控制器之基类设计
    SublimeText配置NodeJS代码提示
    YYCache设计思路及源码学习
    关于近期项目代码整理(iOS)
    iOS中iconfont(图标字体)的基本使用
    容器转场动画
    Xcode7 模拟器安装app (转)
  • 原文地址:https://www.cnblogs.com/xiaoxiaolulu/p/9475120.html
Copyright © 2011-2022 走看看