glob.glob()的一个坑

在学习到《Tensoflow:实战Google深度学习框架(第2版)》-第六章图像识别与卷积神经网络- 6.52.Tensorflow实现迁移学习的章节当中,遇到了一个预处理图像的一个坑。

# 获取一个子目录中所有的图片文件
extensions = ['jpg', 'jpeg','JPG','JPEG'] # 注意下这里
        file_list = []
        dir_name = os.path.basename(sub_dir)
        for extension in extensions:
            file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extension)
            print(file_glob)
            file_list.extend(glob.glob(file_glob))
        if not file_list:
            continue
        print(len(file_list))
extensions = ['jpg', 'jpeg','JPG','JPEG'] 

  这行代码在Linux下是没问题的,但是在Windows下运行是有问题的。

问题出现在下面的glob.glob()函数,里面的通配符匹配,在Windows下是不区分大小写的,而在Linux下是区分大小写的,所以在Linux下没这个问题。

但在Windows中,glob.glob()把*.jpg和*.jpeg

### Python 中 `glob` 模块及其方法 `glob.glob` #### 功能概述 `glob` 是 Python 提供的一个标准库模块,其核心功能是从目录中通过通配符搜索生成文件列表[^1]。该模块的主要作用在于支持基于 Unix Shell 风格的路径名模式匹配来查找符合条件的文件或目录。 #### 方法 `glob.glob` `glob.glob(pathname, *, recursive=False)` 是 `glob` 模块的核心函数之一,用于返回所有与给定模式匹配的路径名称列表[^2]。此函数接受两个参数: - **pathname**: 表示要匹配的路径模式字符串。 - **recursive (可选)**: 如果设置为 `True`,则可以使用 `**` 来表示任意层次的子目录匹配。 #### 基本语法 以下是 `glob.glob()` 函数的基本用法: ```python import glob # 查找当前目录下所有的 .txt 文件 files = glob.glob('*.txt') print(files) # 查找当前目录及其子目录下的所有 .py 文件 files_recursive = glob.glob('**/*.py', recursive=True) print(files_recursive) ``` 上述代码片段展示了如何利用 `glob.glob()` 进行简单的文件查询操作。第一个例子仅限于当前工作目录内的 `.txt` 文件;第二个例子则会递归地遍历整个目录树结构寻找 `.py` 文件。 #### 实际应用案例 下面提供了一个更复杂的实际应用场景——统计项目根目录下所有 Python 脚本的数量并打印它们的名字连同所在位置: ```python import os import glob project_root = './my_project/' # 替换为你自己的项目路径 pattern = project_root + '**/*.py' scripts = glob.glob(pattern, recursive=True) for script in scripts: relative_path = os.path.relpath(script, start=project_root) print(f"Found Script at {relative_path}") total_scripts = len(scripts) print(f"\nTotal number of python files found: {total_scripts}") ``` 这段脚本不仅能够找到目标扩展名为`.py`的所有文档还计算出了总数目,并且给出了相对应的位置信息以便进一步处理或者展示给用户查看。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值