我有一个包含数千个文件的文件夹。我需要将每个文件的文件名与另一个数组中的列进行匹配。
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 元组:root、dirs、files
文档 here
您可以使用列表推导式来实现基于文件名的拆分。
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()
又名“工作函数”接受两个参数。使用列表的前两个元素调用该函数,然后使用这些元素的结果、第三个元素,依此类推。返回值是单个列表
网上有大量关于此的文档。
关于python - os.walk() 结果类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15715152/