
Flask 通过 HTML 表单提交 textarea 内容时,因浏览器将换行统一转为 \r\n(Windows 风格),而 Python 默认文本模式写入会二次转换换行符,导致文件中出现多余空行;本文提供两种精准、兼容的修复方案。
flask 通过 html 表单提交 textarea 内容时,因浏览器将换行统一转为 `\r\n`(windows 风格),而 python 默认文本模式写入会二次转换换行符,导致文件中出现多余空行;本文提供两种精准、兼容的修复方案。
在 Flask 应用中处理
HTML 表单(尤其是
✅ 正确解法不是简单 rstrip()(它仅清除末尾空白,无法修复中间换行污染),而是从源头统一换行符语义。以下是两种推荐方案:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
方案一:预处理 —— 标准化为 Unix 风格 \n(推荐)
@app.route('/edit_file', methods=['GET', 'POST'])
def edit_file():
if request.method == 'POST':
file_contents = request.form['file_contents']
# 安全拆分并重组合并换行符:无视原始 \r\n/\n/\r,统一输出 \n 分隔
normalized = '\n'.join(line.rstrip('\r\n') for line in file_contents.splitlines())
with open(r'C:\Temp\test.txt', 'w', encoding='utf-8') as f:
f.write(normalized)
return redirect(url_for('home'))
else:
with open(r'C:\Temp\test.txt', 'r', encoding='utf-8') as f:
file_contents = f.read()
return render_template('resolve_conflict.html', file_contents=file_contents, file_name=123)
方案二:禁用自动转换 —— 显式指定 newline=""
# 仅需修改 open() 参数,无需改动字符串内容
with open(r'C:\Temp\test.txt', 'w', newline='', encoding='utf-8') as f:
f.write(file_contents)
⚠️ 注意:newline='' 会完全禁用 Python 的换行符转换逻辑,此时 file_contents 中的 \r\n 将原样写入磁盘。若目标文件需严格 Unix 格式(如部署到 Linux 服务器),请优先选用方案一。
关键注意事项:
- 永远显式声明 encoding='utf-8':避免中文等非 ASCII 字符乱码;
- 删除冗余的 .close():with 语句已确保自动安全关闭,手动调用反而可能引发 ValueError;
- 路径使用原始字符串 r'' 或正斜杠 '/':防止 Windows 路径中 \t、\n 被误解析为转义字符;
- 生产环境应增加异常处理:对 IOError、UnicodeDecodeError 等做兜底响应,避免服务中断。
通过以上任一方法,即可彻底消除因换行符不一致导致的“空行膨胀”问题,确保 Web 编辑与本地文件内容严格一致。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










