我想迭代特定文件夹中的文件列表,并通过对单词或三元组单词来存储文件名。我创建了以下代码:
for file_name in os.listdir(path):
file_name_aslist = file_name.split()
o = [(file_name_aslist[x], file_name_aslist [x+1]) for x in range(0, len(file_name_aslist ), 2)]它返回此错误:
IndexError: list index out of range表达式在单个列表上工作,但不想在循环中工作:例如:
list = ['ra', 'ti', 'kaa', 'esss', 'fm', 'am']
print([(list[x], list[x+1]) for x in range(0, len(list), 2)])
[('ra', 'ti'), ('kaa', 'esss'), ('fm', 'am')]此外,当我尝试在三胞胎上迭代时,也拒绝
print([(list[x], list[x+1], list[x+2]) for x in range(0, len(list), 3)])
IndexError: list index out of range发布于 2020-02-02 19:20:57
当列表的长度不是2的倍数时,只需添加一个if条件,在列表中追加一个额外的空字符串以使其均衡化。三胞胎也一样。你必须添加一到两个字符串。
#donot use split function.
file_name_aslist = os.listdir(path)
if len(file_name_aslist) // 2 == 0 :
o = [(file_name_aslist[x], file_name_aslist [x+1]) for x in range(0,
len(file_name_aslist ), 2)]
else:
file_name_aslist.append("")
o = [(file_name_aslist[x], file_name_aslist [x+1]) for x in range(0, len(file_name_aslist ), 2)]发布于 2020-02-02 19:42:21
您正在将文件的名称拆分为“”(空格),如下所示:
file_name_aslist = file_name.split()您不能确定所有的文件在拆分后都有超过一个字。
你能做些什么:
def chunks_n(my_list, n):
for e in range(0, len(my_list), n):
yield my_list[e: e + n]
my_list = ['ra']
print(list(chunks_n(my_list, 2)))输出:
[['ra']]发布于 2020-02-02 19:31:08
第一件事:在使用“单一列表”的示例中,list不一定表示原始的file_name_aslist。如果您的文件名不包含空格,file_name_aslist将是一个具有单个元素的列表,即文件名本身。对于这些情况,很容易验证为什么file_name_aslist [x+1]会抛出一个IndexError。
您真的希望file_name_aslist是一个包含多个元素的列表吗?您是否试图按照其他条件进行拆分,如. (可能通过文件扩展名进行拆分,这也是一种糟糕的方法)?
https://stackoverflow.com/questions/60029593
复制相似问题