python中glob的基本问题

问题描述

我对python真的很不专业,所以如果我的问题很愚蠢,请原谅我的问题。

我正在尝试一个文件夹中所有文件进行操作的简单脚本。 但是,我显然只能递归访问该文件夹!

我解释一下。我有一个文件夹 DATA,其中包含每天的子文件夹(格式为 YYYY-MM-DD)。

如果我尝试

for filename in glob.glob('C:\Users\My username\Documents\DATA\2021-01-20\*'):
  print filename

我没有输出

但是,如果我改为尝试

for filename in glob.glob('C:\Users\My username\Documents\DATA\*\*'):
  print filename

输出是预期的:

C:\Users\My username\Documents\DATA\2021-01-20\210120_HOPG_sputteredTip0001.sxm
C:\Users\My username\Documents\DATA\2021-01-20\210120_HOPG_sputteredTip0002.sxm
...

我什至尝试了不同的文件名称删除破折号,在开头使用字母,仅使用字母,使用较短的文件名称)但结果仍然相同。

我错过了什么?

(顺便说一句:我使用的是python 2.7,这是因为我需要的数据程序仅与python 2兼容)

解决方法

在 Python 2.7 中使用 glob 无法进行递归文件搜索。 IE。搜索文件夹、其子文件夹、子文件夹等中的文件。

您有两个选择:

  • 使用 os.walk(不过,您可能需要更改代码的结构)
  • 使用 PyPI https://pypi.org/project/pathlib2/ 中向后移植的 pathlib2 模块 - 该模块应包含支持使用 glob 通配符进行递归搜索的 ** 函数。
,

在字符串中使用反斜杠时要小心。在 Python 中,这意味着转义字符。尝试在您的字符串前面加上 r,如下所示:

for filename in glob.glob(r'C:\Users\My username\Documents\DATA\*'):
    # Do you business

编辑:
正如@poomerang 指出的那样,之前已经提供了一个更简短的答案,即“r”在 Python here

中的作用

Python 字符串文字的官方文档:Python 2.7Python 3.8