繁体   English   中英

Python 中的 os.walk 返回一个空列表

[英]os.walk in Python is returning an empty list

我正在尝试使用os.walk从目录返回一个 .xlsx 文件列表,但它返回一个空列表。

import os
import pathlib

working_directory = 'N:/files path'

def find_filenames(path, suffix):
# First save all filenames in a list: file_list:
    file_list = []
    # Gets a list of all validation xlsx files in the folder:
    for subdir, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(suffix):
                # save filesnames in file_list: 
                file_list.append(file)
            return file_list
        
print(find_filenames(pathlib.Path(working_directory), '.xlsx')

它正在打印:

[]

什么时候应该是这样的:

在此处输入图像描述

我错过了什么或做错了什么? 谢谢!

应该是:

import os
import pathlib

working_directory = 'N:/files path'

def find_filenames(path, suffix):
# First save all filenames in a list: file_list:
    file_list = []
    # Gets a list of all validation xlsx files in the folder:
    for subdir, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(suffix):
                # save filesnames in file_list: 
                file_list.append(file)
    return file_list

问题是你把return放错了地方。 如果您在问题中输入类似代码并且第一个文件不是以.xlsx结尾,它将直接返回[]

虽然上述答案是正确的并且是最简单的解决方法,但我想推荐一个建议。 您正在导入pathlib ,它已经内置了递归glob 因此,如果您的期望是路径 object 的路径,则可以简化代码:

import pathlib

working_directory = 'N:/files path'

def find_filenames(path: pathlib.Path, suffix: str):
    return list(path.rglob('*'+suffix))


print(find_filenames(pathlib.Path(working_directory), '.xlsx'))

rglob方法将在这里进行递归通配,此外,您不需要为这段代码导入os

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM