Python 检查文件.endswith是否在扩展名列表中

Python 检查文件.endswith是否在扩展名列表中,python,python-3.x,Python,Python 3.x,我有一个or循环,循环遍历一个目录中的所有文件,我试图检查文件扩展名是否在扩展名列表中。我得到以下错误AttributeError:“tuple”对象没有属性“endswith” DIRECTORY = os.path.dirname(os.path.realpath(__file__)) EXTENTIONS = (".xlsx", ".xlsm", ".xltx", ".xltm") files = os.walk(DIRECTORY) for file in files: if

我有一个or循环,循环遍历一个目录中的所有文件,我试图检查文件扩展名是否在扩展名列表中。我得到以下错误
AttributeError:“tuple”对象没有属性“endswith”

DIRECTORY = os.path.dirname(os.path.realpath(__file__))
EXTENTIONS = (".xlsx", ".xlsm", ".xltx", ".xltm")
files = os.walk(DIRECTORY)

for file in files:
    if (file.endswith(EXTENTIONS)):
        # Do something here

os.walk
返回由
根、目录、文件组成的三元组。你只需要这里的文件

 DIRECTORY = os.path.dirname(os.path.realpath(__file__))  
 EXTENTIONS = (".xlsx", ".xlsm", ".xltx", ".xltm")
 files = os.walk(DIRECTORY)

 for _, _, file in files:
    if (file.endswith(EXTENTIONS)):
       # Do something here
如果不需要递归遍历目录,可以在此处使用
os.listdir()

使用不正确。它产生一个三元组
(目录路径、目录名、文件名)

由于您希望检查多个扩展,因此将它们全部放入
集中并使用“
in
”运算符检查其中的成员资格会更快,因为它使用哈希表而不是线性搜索来检查匹配项:

import os

DIRECTORY = os.path.dirname(os.path.realpath(__file__))
EXTENTIONS = {".xlsx", ".xlsm", ".xltx", ".xltm"}

for dirpath, dirnames, filenames in os.walk(DIRECTORY):
    for filename in filenames:
        ext = os.path.splitext(filename)[1]
        if ext in EXTENTIONS:
            # Do something here


恭喜!您的问题是什么?了解如何使用返回三元组的os.walk。检查文档,除非您确实想
walk
子目录等。。。然后您可能想使用
os.listdir(目录)
来代替。。。否则。。。您需要调整代码以遵循文档中给出的示例…您的问题是什么?请提供完整的错误消息,以及一个。