Python类函数追加写入TXT文件时换行异常问题如何解决?
问题原因
- 原始代码行合并问题:写入的每条内容末尾没有添加换行符
\n,新内容会直接拼接在旧文件最后一行的末尾,导致两行内容合并。 - 修改后出现空行问题:将
\n放在每行内容的开头,若旧文件最后一行本身已经带有换行符,追加的第一个\n会形成连续两个换行,就会出现空行;如果多次调用该函数写入,每次开头的\n还会累积产生更多多余空行。
解决代码
我们可以先判断旧文件末尾是否存在换行符,不存在则先补一个换行,再将新内容的换行符加在每行末尾,即可符合预期:
def sav_dic(self): import os file_path = 'my_dic.txt' # 标记是否需要先补换行符 add_newline_before = False # 文件存在且不为空时,检查末尾字符 if os.path.exists(file_path) and os.path.getsize(file_path) > 0: with open(file_path, 'rb') as f: # 定位到最后一个字符 f.seek(-1, os.SEEK_END) last_char = f.read(1) # 末尾不是换行/回车符时需要补换行 if last_char not in (b'\n', b'\r'): add_newline_before = True # 追加写入内容 with open(file_path, 'a', encoding='utf-8') as f2: if add_newline_before: f2.write('\n') # 每条内容末尾加换行符 for key, value in zip(re_doc2, def_lst): f2.write(f"{key}:{value}\n")
额外说明
- 使用
with语句管理文件句柄,不需要手动调用close(),程序会自动释放文件资源,避免异常时文件泄漏。 - 用
zip配对两个列表的元素,写法比按索引遍历更简洁易读。 - 显式指定
encoding='utf-8'可以避免不同操作系统默认编码不同导致的乱码问题。 - 兼容Windows(
\r\n)和类Unix(\n)的换行格式。 - 如果写入后仍然存在多余空行,可检查
re_doc2和def_lst中的元素是否自带换行符,使用strip()方法去除即可:f2.write(f"{key.strip()}:{value.strip()}\n")。
内容的提问来源于stack exchange,提问作者user17315266
相关产品推荐
相关产品推荐

