python遍历,如何读取目标文件夹?

img


1.遍历该路径下的部分文件夹,该怎么写代码?

img


2.遍历多个文件夹,但是需求是读取每个文件夹中“2023”这个文件夹中的文件,该怎么写?
因为全部文件夹读取太久了,想要更加精准搜索,让python没那么辛苦。
谢谢大家分享

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7573202
  • 你也可以参考下这篇文章:python随机从批量文件夹中筛选一定数量的照片/文件夹批量重命名
  • 除此之外, 这篇博客: python使用文件路径时最好用绝对路径,而不是相对路径中的 什么时候出现了问题? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    之前的

    文章,里面在用PIL生成验证码图片时,设置字体时一开始这样写的
    font=ImageFont.truetype('times.ttf',size=40)

    且字体文件和这句代码所在文件都处于同一个目录,理论上引用处于同一目录内的文件时是可以直接使用被引用文件名的。用pycharm在本地启动这个项目,验证码图片正常生成。可是将所有项目文件上传到服务器(腾讯云CentOS),在服务器上用uwsgi启动项目,验证码图片却加载失败了,uwsgi的日志里有报错OSError: cannot open resource,说明字体没有加载成功。要么是从系统中复制出字体文件时手动修改了文件名,要么是加载时路径不对。我是复制系统的Times New Roman 常规,就叫times.ttf,所以是加载时路径不对。

    然后换个稍微规范点的写法,这样也不行。

    font=ImageFont.truetype('./times.ttf',size=40)
  • 您还可以看一下 关东升老师的Python数据分析实战篇:从数据搜集到数据可视化一步一步完成二手房价数据分析课程中的 课程介绍小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    可以使用os模块来遍历指定路径下的文件夹和文件。首先,需要使用os.listdir()或os.scandir()函数获取指定路径下的所有文件和文件夹,然后使用os.path.isdir()函数判断是否是文件夹,如果是文件夹并且包含名为"2023"的文件夹,则使用递归的方式进入该文件夹并遍历其中的文件。具体实现代码如下:

    import os
    
    def traverse_folders(path):
        for file_or_folder in os.listdir(path):
            file_or_folder_path = os.path.join(path, file_or_folder)
            if os.path.isdir(file_or_folder_path):
                if "2023" in os.listdir(file_or_folder_path):    # 判断是否包含名为"2023"的文件夹
                    traverse_folders(os.path.join(file_or_folder_path, "2023"))    # 递归进入该文件夹并遍历其中的文件
            else:
                # 处理文件的操作
                pass
    

    其中,path为需要遍历的文件夹路径。调用该函数即可开始遍历。

    如果需要遍历多个文件夹,并且只想读取每个文件夹中名为"2023"的文件夹中的文件,则可以在遍历时增加判断,具体实现代码如下:

    def traverse_folders(paths):
        for path in paths:
            for file_or_folder in os.listdir(path):
                file_or_folder_path = os.path.join(path, file_or_folder)
                if os.path.isdir(file_or_folder_path):
                    if file_or_folder == "2023" and "2023" in os.listdir(file_or_folder_path):
                        traverse_folders(os.path.join(file_or_folder_path, "2023"))
                    else:
                        continue    # 不是名为"2023"的文件夹,跳过不处理
                else:
                    # 处理文件的操作
                    pass
    

    其中,paths为需要遍历的多个文件夹路径,使用for循环依次遍历每个文件夹。在遍历文件夹时,增加对名为"2023"的文件夹的判断,如果符合条件则进入该文件夹并遍历其中的文件。如果不符合条件,则跳过不处理。

    如果需要精确搜索指定的文件夹和文件,可以使用glob模块来实现,具体实现方法为:

    import glob
    
    folders = glob.glob('/path/to/folder/*2023')    # 获取指定路径下名为"2023"的文件夹
    for folder in folders:
        files = glob.glob(folder + '/*.txt')    # 获取每个文件夹下的txt格式文件
        for file in files:
            # 处理文件的操作
            pass
    

    其中,可以使用glob.glob()函数来获取指定路径下符合条件的文件或文件夹。在本例中,首先使用glob.glob()获取指定路径下名为"2023"的文件夹,然后使用for循环逐一处理每个文件夹下的txt格式文件。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^