如何移除数组中的列表包裹,提取os.listdir返回的单个文件名?
解决数组元素被列表包裹的问题
嘿,我明白你的问题了——你现在的allFileNames数组里每个元素都是一个单元素列表,而不是直接的文件名字符串对吧?这是因为你用了append()把os.listdir()返回的整个列表直接加进去了,咱们有几个简单的解决办法:
方法一:用extend()替代append()(推荐,从源头解决)
append()会把整个列表作为单个元素添加到数组里,而extend()会把列表里的每一个元素单独加进去。修改你的代码里的最后一行就行,另外顺带优化下路径拼接的方式,避免手动加斜杠出错:
import os allFileNames = [] folder_path = "你的目标文件夹路径/" for folders in os.listdir(folder_path): sub_folder_path = os.path.join(folder_path, folders) # 先判断是不是文件夹,避免遍历到文件时报错 if os.path.isdir(sub_folder_path): for folder in os.listdir(sub_folder_path): if folder == 'images': image_folder_path = os.path.join(sub_folder_path, folder) image_files = os.listdir(image_folder_path) allFileNames.extend(image_files) # 替换append为extend
修改后allFileNames里就直接存储文件名字符串了,遍历打印就能得到你想要的结果。
方法二:如果已经有了嵌套数组,做扁平化处理
要是你已经生成了原来的嵌套版allFileNames,不想重新跑代码,可以用列表推导式把它扁平化:
# 将嵌套数组转换为单个元素的数组 flat_allFileNames = [file_name for sublist in allFileNames for file_name in sublist] # 现在遍历打印就能得到目标格式 for i in flat_allFileNames: print(repr(i)) # repr()会自动添加引号,和你期望的输出格式一致
方法三:针对单文件场景直接取列表元素(不通用)
如果你能确定每个images文件夹里只有一个文件,也可以直接取列表的第一个元素添加:
allFileNames.append(image_file[0])
不过这个方法有局限性,如果某个images文件夹里有多个文件,只会添加第一个,其余的会被漏掉,所以还是前两种方法更稳妥。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

