提问人:Cuteo-P 提问时间:10/13/2023 更新时间:10/13/2023 访问量:42
glob 返回一个空列表,但在调试模式下,该列表按预期返回
glob returns an empty list but in debug mode the list returns as intended
问:
所以,我的电脑上有“价格.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 模块和其他库之间可能存在冲突,但我不确定。欢迎任何帮助。谢谢
答:
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"))
评论
python -d program.py
print(os.getcwd())