我正在尝试编写一个Python脚本,在文件夹中搜索所有带有.txt
扩展名的文件。在手册中,我只看到它硬编码到glob.glob("hardcoded path")
。
如何使glob搜索模式的目录成为变量?具体来说:用户输入。
这是我试过的:
import glob
input_directory = input("Please specify input folder: ")
txt_files = glob.glob(input_directory+"*.txt")
print(txt_files)
尽管使用.txt
文件提供了正确的目录,但该脚本会打印一个空列表[ ]
。
如果您不确定路径末尾是否包含分隔符号(通常为'/'
或'\'
),则可以使用os.path.join
进行连接。这是一种比手动附加本地操作系统路径分隔符更便携的方法,并且比编写条件更短,以确定是否每次都需要:
import glob
import os
input_directory = input('Please specify input folder: ')
txt_files = glob.glob(os.path.join(input_directory, '*.txt'))
print(txt_files)
对于Python 3.4+,您可以使用pathlib.Path.glob()
:
import pathlib
input_directory = pathlib.Path(input('Please specify input folder: '))
if not input_directory.is_dir():
# Input is invalid. Bail or ask for a new input.
for file in input_directory.glob('*.txt'):
# Do something with file.
在time of check to time of use和glob之间有一个is_dir()
种族,遗憾的是不能轻易避免,因为在这种情况下glob()
只返回一个空的迭代器。在Windows上,甚至可能无法避免,因为您无法打开目录来获取文件描述符。在大多数情况下这可能很好,但如果您的应用程序具有a different set of privileges from the end user或具有对父目录的写访问权限的其他应用程序,则可能会出现问题。此问题也适用于使用glob.glob()
的任何解决方案,它具有相同的行为。
最后,Path.glob()
返回一个迭代器,而不是一个列表。因此,您需要如图所示循环它,或将其传递给list()
以实现它。