Python walk()结果类型

Python walk()结果类型,python,tuples,os.walk,Python,Tuples,Os.walk,我有一个包含数千个文件的文件夹。我需要将每个文件的文件名与另一个数组中的列相匹配 import os filenames = [] for files in os.walk("Directory"): filenames.append(files) 我现在有了目录中每个文件名的元组。我现在想要的是拼接元组的每个元素,并将其添加到一个新数组中。我的代码与此类似: files = [] for i in filenames: files.append(i[2:7]) 我得到一个

我有一个包含数千个文件的文件夹。我需要将每个文件的文件名与另一个数组中的列相匹配

import os

filenames = []
for files in os.walk("Directory"):
    filenames.append(files)
我现在有了目录中每个文件名的元组。我现在想要的是拼接元组的每个元素,并将其添加到一个新数组中。我的代码与此类似:

files = []
for i in filenames:
    files.append(i[2:7])
我得到一个错误,“AttributeError:'tuple'对象没有属性'append' 在这里搜索之后,我尝试了其他命令,比如join。我尝试将文件名转换为列表

即使我说了这样的话:

filenames[0]
它只返回第一个字符串结果,返回整个文件名数组。这有什么办法吗


感谢您的帮助。

os.walk
返回一个3元组:
根、目录、文件

文件

您可以使用列表理解来实现基于文件名的拆分

filenames = reduce(lambda x,y: x+y, [files for root, dirs, files in os.walk('.')])
files = [name[2:7] for name in filenames]
以下是解释: Lambda函数是匿名函数。你不归还任何东西。定义包含返回的表达式。这在处理动态生成的数据方面非常强大

reduce()
a.k.a“worker函数”接受两个参数。使用列表的前两个元素调用函数,然后使用这些元素的结果调用第三个元素,依此类推。返回值是单个列表


网上有大量关于这方面的文档

实际上,我需要在文件名中包含路径,并发现使用列表表达式可以实现这一点。由于这对我有帮助,我想添加一个解决方案,该解决方案提供一个完整路径的列表:

onlyfiles = reduce(lambda x,y : x+y, [map(lambda x: root + "/" + x, files) for root, dirs, files in os.walk(mypath)])

Well
os.walk
生成一个3元组。请尝试在此处查找出现该错误的原因:我认为,在我的for循环中,仅从os.walk请求文件,它将不再是三元组。@Caldere然后查看编辑是否满足您的需要。有一个合并列表可以接受吗?这正是我需要它做的!非常感谢你。请你给我解释几件事,因为我以前没有遇到过lambda或reduce方法。非常感谢!我们将继续阅读有关它们的文章。你帮了大忙!