Python列表嵌套添加换行符报错及文件写入格式修复咨询
任务列表写入文件的索引错误修复与格式优化
错误原因分析
你代码里的for i in list_of_tasks循环中,i是每个任务的子列表元素(比如["Bob", "Finish report", "...", "Yes"]),而非整数索引。当你执行list_of_tasks[i][-1]时,相当于用列表作为索引去访问另一个列表,Python会抛出TypeError,因为列表索引只能是整数或切片类型。
修正方案
方案1:用enumerate获取索引与元素
通过enumerate同时拿到任务的索引和内容,判断是否为最后一个任务:
with open('tasks.txt', 'w') as f2: total_tasks = len(list_of_tasks) for idx, task in enumerate(list_of_tasks): task_str = ", ".join(task) if idx == total_tasks - 1: # 给最后一个任务的最后字段添加换行 task[-1] = f"{task[-1]}\n" f2.write(", ".join(task)) else: # 其他任务写完后加换行,保证每行一个任务 f2.write(task_str + "\n")
方案2:更简洁的写入逻辑(推荐)
不需要修改任务列表,直接在写入时给每个任务字符串添加换行,确保文件每行对应一个任务,从根源解决格式混乱问题:
with open('tasks.txt', 'w') as f2: for task in list_of_tasks: # 每个任务拼接后加换行,保证文件格式清晰 f2.write(", ".join(task) + "\n")
这种写法更简洁,且最后一行的换行不会影响后续文件读取(多数解析逻辑会忽略末尾空白行)。
方案3:单独处理最后一行
如果必须给最后一个任务的最后字段加换行而非整个行尾,可单独提取最后一行处理:
with open('tasks.txt', 'w') as f2: # 写入除最后一行外的所有任务 for task in list_of_tasks[:-1]: f2.write(", ".join(task) + "\n") # 处理最后一行(避免空列表报错) if list_of_tasks: last_task = list_of_tasks[-1] last_task[-1] = f"{last_task[-1]}\n" f2.write(", ".join(last_task))
内容的提问来源于stack exchange,提问作者tekkyprograms
相关产品推荐
相关产品推荐

