必掌握的技巧之一

简介: 必掌握的技巧之一

获取文件夹中的文件列表


问题核心:★★    口感:苦瓜


问题


想获取文件系统中某个目录下的所有文件列表。



解决方案


使用 os.listdir() 函数来获取某个目录中的文件列表:


    import os
    names = os.listdir('somedir')

    结果会返回目录中所有文件列表,包括所有文件,子目录,符号链接等等。如果你需要通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导

    比如:

      import os.path
      names = [name for name in os.listdir('somedir')
      if os.path.isfile(os.path.join('somedir', name))]
      dirnames = [name for name in os.listdir('somedir')
      if os.path.isdir(os.path.join('somedir', name))]

      字符串的 startswith() 和 endswith() 方法对于过滤一个目录的内容也是很有用 的。比如:



      pyfiles = [name for name in os.listdir('somedir')
      if name.endswith('.py')]


      对于文件名的匹配,你可能会考虑使用 glob 或 fnmatch 模块。

      比如:


      import glob
      pyfiles = glob.glob('somedir/*.py')
      from fnmatch import fnmatch
      pyfiles = [name for name in os.listdir('somedir')
      if fnmatch(name, '*.py')]


      结论


      获取目录中的列表是很容易的,但是其返回结果只是目录中实体名列表而已。如果你还想获取其他的元信息,比如文件大小,修改时间等等,你或许还需要使用到 os.path 模块中的函数或着 os.stat() 函数来收集数据。比如:


      import os
      import os.path
      import glob
      pyfiles = glob.glob('*.py')
      name_sz_date = [(name, os.path.getsize(name), os.path.getmtime(name))
      for name in pyfiles]
        for name, size, mtime in name_sz_date:
          print(name, size, mtime)
      file_metadata = [(name, os.stat(name)) for name in pyfiles]
      for name, meta in file_metadata:
        print(name, meta.st_size, meta.st_mtime)

      最后还有一点要注意的就是,有时候在处理文件名编码问题时候可能会出现一些 问题。通常来讲,函数 os.listdir() 返回的实体列表会根据系统默认的文件名编码来 解码。但是有时候也会碰到一些不能正常解码的文件名。


      -END-

      ﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌


      往期好文合集


      高技巧,Python 可以读写压缩文件吗<<戳这里

      Python 读取 JSON 数据的骚操作<<戳这里多样式的字典,重口感<<戳这里


      最 后   

      若觉得文章不错,转发分享,也是我们继续更新的动力。Ps 将不在提供疫情查询服务在公众号内回复「资料」,即可获取 Python资料,期待你的关注~

      相关文章
      |
      Ubuntu 机器人 API
      ubuntu 16.04+ros kinetic + gazebo+ aws-robotics 室内环境导航仿真
      ubuntu 16.04+ros kinetic + gazebo+ aws-robotics 室内环境导航仿真
      1263 0
      |
      算法 分布式数据库 C语言
      堆的相关时间复杂度计算(C语言)
      堆的相关时间复杂度计算(C语言)
      |
      存储 Shell iOS开发
      CMake中文手册_target_link_libraries(3.26)
      CMake中文手册_target_link_libraries(3.26)
      2099 0
      |
      网络协议 安全 Linux
      Linux中无法连接互联网或局域网
      【10月更文挑战第5天】
      3398 3
      |
      传感器 编解码 vr&ar
      Intel深度摄像头RealSense D435(实感双目摄像头)和目标检测结合使用
      Intel深度摄像头RealSense D435(实感双目摄像头)和目标检测结合使用
      7746 0
      |
      存储 机器人 测试技术
      AprilTags二维码的检测与应用
      AprilTags二维码的检测与应用
      4157 0
      |
      Kotlin Python
      Python(三十)python中的类class
      Python是一门面向对象语言。 Class类是面向对象中非常重要的一个元素 什么是类呢? Class类是一个功能的合集。 一:类的创建 1 :类的构造函数 python 复制代码 # 定义类 class tests: '测试创建类' # 类文档字符串 projectName='' def __init__(self,name): print("初始化类调用了构造函数") self.projectName = name print("构造函数接收到了参数:",self.projectName) T = tests('时间里
      467 0
      |
      前端开发 JavaScript Python
      Python创建一个简单的HTTP服务器
      Python创建一个简单的HTTP服务器
      |
      编译器 C++
      C++中函数的默认参数(缺省参数)
      C++中函数的默认参数(缺省参数)
      352 0
      |
      C++ 容器
      【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)
      【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)