python@路径扫描

文章目录

    • python遍历目录内容的若干方法
      • 小结

python遍历目录内容的若干方法

  • os.list

    • import os
      os.listdir()
      
  • os.scandir

    • for i in os.scandir():
          if not i.name.startswith('.') and i.is_file():
              print(i.name)
      
  • Path.iterdir()

    • from pathlib import Path
      
      p = Path.cwd()
      for item in p.iterdir():
          print(item.name)
      
  • os.walk

    • import os
      from os.path import join, getsize
      for root, dirs, files in os.walk('python/Lib/email'):
          print(root, "consumes", end=" ")
          print(sum(getsize(join(root, name)) for name in files), end=" ")
          print("bytes in", len(files), "non-directory files")
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories
      
      • . consumes 5 bytes in 1 non-directory files
        .\.git consumes 224 bytes in 4 non-directory files
        .\.git\hooks consumes 23442 bytes in 13 non-directory files
        .\.git\info consumes 240 bytes in 1 non-directory files
        .\.git\objects consumes 0 bytes in 0 non-directory files
        .\.git\objects\info consumes 0 bytes in 0 non-directory files
        .\.git\objects\pack consumes 0 bytes in 0 non-directory files
        .\.git\refs consumes 0 bytes in 0 non-directory files
        .\.git\refs\heads consumes 0 bytes in 0 non-directory files
        .\.git\refs\tags consumes 0 bytes in 0 non-directory files
        .\archive consumes 2330 bytes in 4 non-directory files
        .\CASIA_demos consumes 1866 bytes in 1 non-directory files
        .\RAVDESS_demos consumes 2820 bytes in 1 non-directory files
        
  • glob

    • glob 模块是 Python 标准库中的一个有用的模块,它可以用来返回匹配特定模式的所有文件路径。你可以使用 glob 模块来搜索特定的文件模式,或者更有用的是,使用通配符字符来搜索文件名匹配特定模式的文件。

    • 要使用 glob 模块,首先你需要在你的 Python 脚本中导入它,然后你可以使用 glob 函数来找到匹配特定模式的所有文件。

    • 例如,下面的代码展示了如何使用 glob 函数来找到一个目录中所有以 .txt 结尾的文件:

    • import glob
      
      # Find all .txt files in the current directory
      files = glob.glob("*.txt")
      
      # Print the list of files
      print(files)
      
    • glob 模块使用 Unix 风格的模式匹配规则和参数,不支持波浪号扩展,但是支持 *,? [] 表示的字符范围。它通过结合使用 os.scandir() 和 fnmatch.fnmatch() 函数来实现匹配,而不是实际调用子shell。

    • glob 模块还提供了 iglob 函数,它和 glob 函数类似,但是返回一个生成器而不是一个列表。这样可以节省内存和时间,特别是当匹配结果很多时

    • 你可以参考以下链接来了解更多关于 glob 模块的用法和示例:

      • Python’s Glob Module: A tutorial for filename matching | Towards Data …
      • glob — Unix style pathname pattern expansion - Python
      • Glob in Python Explained | Built In - Medium

小结

  • os.listdir() 是最简单的方法,但是也是最低效的方法,因为它只返回文件名,不包含任何其他信息。如果你需要获取文件的类型或属性,你需要额外调用 os.stat() 函数,这会增加开销和时间。

  • os.scandir() 是一个改进的方法,它返回一个生成器,它产生 DirEntry 对象,这些对象包含了文件名,类型和属性信息。这样就可以避免对每个文件调用 os.stat() 函数,从而提高性能和速度。os.scandir() 还可以检测符号链接,隐藏文件等。

  • pathlib 模块是一个面向对象的方法,它提供了 Path 类和相关的方法,可以方便地进行路径操作和转换。Path.iterdir() 是其中一个方法,它返回一个生成器,它产生 Path 对象,这些对象也包含了文件名,类型和属性信息。Path.iterdir() 的优点是它支持面向对象的编程风格,可以方便地进行路径操作和转换。

  • os.walk() 是一个递归的方法,它返回一个生成器,它产生三元组 (root, dirs, files),其中 root 是当前遍历的目录,dirs 是 root 中的子目录列表,files 是 root 中的文件列表。这个方法可以递归地遍历整个目录树,并且可以自定义遍历顺序和策略。

  • glob 模块是一个匹配的方法,它提供了 glob() 函数,它可以根据指定的通配符模式匹配文件名,并返回一个包含匹配结果的列表。这个方法可以方便地筛选出特定类型或格式的文件,并且支持多层级的匹配。

  • 总之,os.scandir() 和 Path.iterdir() 都比 os.listdir() 更高效和功能强大,但是具体选择哪一个取决于你的编程习惯和需求。os.walk() 和 glob 模块则提供了更灵活和强大的遍历和匹配功能。

你可能感兴趣的:(python)