制作glob目录变量

时间:2018-05-16 17:59:01

标签: python python-3.x glob

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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.

is_dir()和全局对象之间存在time of check to time of use竞争,不幸的是,这很容易避免,因为glob()在这种情况下只返回一个空的迭代器。在Windows上,甚至无法避免,因为您无法打开目录来获取文件描述符。在大多数情况下,这可能很好,但是如果您的应用程序具有a different set of privileges from the end user或来自对父目录具有写访问权的其他应用程序,则可能会出现问题。此问题也适用于任何使用glob.glob()的行为相同的解决方案。

最后,Path.glob()返回一个迭代器,而不是列表。因此,您需要如图所示对其进行循环,或将其传递给list()来实现。