如何将数组内容逐行写入文本文件?修正代码换行逻辑错误
问题根因
原代码运行后第一行出现两个姓名,是两处错误共同导致的:
- 换行逻辑颠倒:首行写入姓名后没有追加换行,第二个姓名写入时会直接拼接在首行内容末尾,直接造成两个名字同处一行
- 变量名笔误:判断最后一个元素位置时引用了未定义的
names变量,实际存储申请人的列表名是applicants,代码运行时会直接抛出NameError - 额外冗余:手动维护
index计数器的写法没有必要,徒增逻辑出错的可能
修正实现
不需要拆分首行、中间行、尾行做复杂判断,以下两种写法都可以稳定实现每行一个姓名的存储要求:
推荐简洁写法
遍历排序后的列表,每个姓名后拼接换行符写入即可。文件末尾保留换行是通用文本存储规范,完全不影响姓名逐行展示的效果:
applicants = ["Timothy", "David", "Mary", "Drew", "Titus", "Samuel", "Avery"] applicants.sort() # 使用上下文管理器自动处理文件关闭,避免资源泄漏 with open("admitted_staff.txt", "w", encoding="utf-8") as f: for name in applicants: f.write(f"{name}\n")
无末尾换行写法
如果明确要求文件最后一行不能带多余换行,可以直接用字符串join方法一次性拼接所有内容,姓名之间用换行符分隔后一次写入,不需要循环判断:
applicants = ["Timothy", "David", "Mary", "Drew", "Titus", "Samuel", "Avery"] applicants.sort() with open("admitted_staff.txt", "w", encoding="utf-8") as f: f.write("\n".join(applicants))
原结构最小修改版
如果要保留你原本写的index计数循环结构,只需要调整换行符的位置——非首行内容前加换行,而非中间行内容后加换行,同时修正变量名笔误即可:
applicants = ["Timothy", "David", "Mary", "Drew", "Titus", "Samuel", "Avery"] applicants.sort() index = 0 with open("admitted_staff.txt", "w", encoding="utf-8") as file: for el in applicants: if index == 0: file.write(el) index += 1 else: # 非首行先写换行,再写当前姓名,就不会和上一行内容拼接 file.write(f"\n{el}") index += 1
内容的提问来源于stack exchange,提问作者TechGeek
相关产品推荐
相关产品推荐

