glob 返回一个空列表,但在调试模式下,该列表按预期返回

glob returns an empty list but in debug mode the list returns as intended

提问人:Cuteo-P 提问时间:10/13/2023 更新时间:10/13/2023 访问量:42

问:

所以,我的电脑上有“价格.pdf”。如果我准确地说,目录是“D:\python\price.pdf”。 代码如下:

import glob
pdf_files = glob.glob("*pdf")
print(pdf_files)

你可以看到我没有路径,只有文件格式。这是因为 .py 文件和所需的 .pdf 位于同一目录中。我假设我不需要填写路径,因为两个文件都放在一起。

我得到的输出当然是 []。

棘手的部分是代码在调试模式下工作正常并返回所需的

['price.pdf']

我试着填写这样的路径

pdf_files = glob.glob("D:\\python\*pdf")

但它返回了这个

['D:\\python\\price.pdf']

我以为这个 glob 模块和其他库之间可能存在冲突,但我不确定。欢迎任何帮助。谢谢

python 列表 glob

评论

0赞 9769953 10/13/2023
这里的“调试模式”是什么?运行?python -d program.py
0赞 9769953 10/13/2023
“目录是”D:\python\price.pdf“”:我假设你的意思是“D:\python”,因为你显示的似乎是文件路径,而不是目录路径。
0赞 Abdul Aziz Barkat 10/13/2023
关于当前工作目录,您有什么信息?print(os.getcwd())
0赞 9769953 10/13/2023
你只提到价格 .pdf;该目录中还有其他 PDF 文件吗?
0赞 Raphael 10/19/2023
@Cuteo-P 如果以下任何一个答案对您有所帮助,请将其中一个标记为已接受。

答:

2赞 Raphael 10/13/2023 #1

我假设您不希望输出中包含完整的文件路径,而只是文件名?
您可以使用 pathlib 删除父目录部分。 这个小脚本允许您定义一个搜索目录,找到里面的所有 pdf,然后只打印文件名。

from pathlib import Path
# set search directory to any path you like
search_dir = Path("D:\\python")

# find all pdfs in search dir (does not search nested folders, use rglob if desired)
files = search_dir.glob("*.pdf")
#files = search_dir.rglob("*.pdf")

# remove parent from paths
files = [p.name for p in files]

print(files)

pathlib 包含许多用于处理文件的有用功能,我强烈推荐它。https://docs.python.org/3/library/pathlib.html

0赞 Yarik0urWorld 10/13/2023 #2

@Raphael答案的另一种选择:os.path

import os, glob

pdf_files = [os.path.basename(i) for i in glob.glob("D:\\python\\*pdf")]

print(pdf_files)

或者,您可以通过显式更改工作目录来确保自己在:D:\python

import os, glob

os.chdir("D:\\python")

print(glob.glob("*pdf"))