如何创建一个函数,允许我将.txt文件的所有路径存储在一个列表中?

2024-10-01 07:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学校做作业,我被要求做以下工作: 编写一个名为get\u paths的函数,并将其存储在Python模块utils.py中 函数获取路径: 获取一个名为input\u folder的位置参数 该函数将所有指向.txt文件的路径存储在列表的input\文件夹中 函数返回一个字符串列表,即每个字符串都是一个文件路径

我试过glob,但那只得到了我名字的一部分,我用了listdir,得到了我想要的,但我不知道该返回什么

def get_path(input_folder):
    for file in os.listdir(input_folder):
        if file.endswith(".txt"):
            print([os.path.join(input_folder, file)])
['C:\\Users\\Maverick.DESKTOP-N0E7K8Q\\Desktop\\python 
notes\\Data\\books\\AnnaKarenina.txt']
['C:\\Users\\Maverick.DESKTOP-N0E7K8Q\\Desktop\\python 
notes\\Data\\books\\HuckFinn.txt']
['C:\\Users\\Maverick.DESKTOP-N0E7K8Q\\Desktop\\python 
notes\\Data\\books\\Macbeth.txt']

输出工作,但当我进入下一步,调用函数,然后创建变量时,我得到

final_output = get_paths("../Data/books")
print(final_output)

['../Data/books\\AnnaKarenina.txt']
['../Data/books\\HuckFinn.txt']
['../Data/books\\Macbeth.txt']
None

我觉得我需要返回一些东西,以便打印功能可以正常工作,但我不知道我需要返回什么。任何帮助都将不胜感激


Tags: 函数路径txtinputdatagetfolderbooks
3条回答

似乎需要返回匹配文件名的列表

您可以创建一个列表,将其累加到其中,然后返回:

def get_path(input_folder):
    retval = []
    for file in os.listdir(input_folder):
        if file.endswith(".txt"):
            retval.append(os.path.join(input_folder, file))
    return retval

或列表:

def get_path(input_folder):
    return [os.path.join(input_folder,file) for file in os.listdir(input_folder) if file.endswith(".txt")]

请注意,glob在本例中正好是这样做的(另外,在windows上,它还将匹配以.TXT(大写)结尾的文件,而第一个解决方案不匹配(除非在测试中插入.lower()):

import glob, os
def get_path(input_folder):
    return glob.glob(os.path.join(input_folder,"*.txt"))

实现目标最有效的方法是将函数转换为生成器:

def get_path(input_folder):
    for file in os.listdir(input_folder):
        if file.endswith(".txt"):
            yield os.path.join(input_folder, file)

然后你的列表变量就可以理解了

my_results = [e for e in get_paths("../Data/books")]

打印或根据需要使用

None已经没有问题了(见下面的评论)。作为参考,如果不是,你可以过滤理解:

my_results = [e for e in get_paths("../Data/books") if e is not None]

您只需要存储结果并返回列表,而不是在解释None的函数中打印它

def get_path(input_folder):
    result = []
    for file in os.listdir(input_folder):
        if file.endswith(".txt"):
            result.append(os.path.join(input_folder, file))
    return result

如果您想使用理解列表:

def get_path(input_folder):
    return [os.path.join(input_folder, file) for file in os.listdir(input_folder) if file.endswith(".txt")]

相关问题 更多 >