制作glob目录变量

问题描述 投票:0回答:2

我正在尝试编写一个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文件提供了正确的目录,但该脚本会打印一个空列表[ ]

python python-3.x glob
2个回答
3
投票

如果您不确定路径末尾是否包含分隔符号(通常为'/''\'),则可以使用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)

2
投票

对于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()以实现它。

© www.soinside.com 2019 - 2024. All rights reserved.