Tkinter读取文本框内容写入CSV时为何额外添加双引号?
问题解决:Tkinter文本框输入写入CSV时双引号被转义的问题
原因分析
这不是Tkinter的问题,是Python内置csv模块的默认规则导致的。CSV格式规范中,当字段包含双引号、逗号或换行符时,会自动用双引号包裹整个字段,同时将字段内部的双引号替换为两个双引号(这是CSV标准的转义方式)。而单引号不属于CSV的特殊处理字符,所以不会被修改。
比如你输入的He said "That is my dog",写入CSV时,因为字段包含双引号,模块会自动给整个字段加双引号,同时把内部的双引号转成"",最终就变成了"He said ""That is my dog"""。
解决方法
要保留原始字符串的双引号,需要修改csv.writer的quoting参数,禁用自动引号处理:
代码示例
import tkinter as tk import csv main_window = tk.Tk() text_box = tk.Text(main_window, width=50, height=15, background="white") text_box.pack() def save_to_csv(): # 去掉文本框末尾默认的换行符 content = text_box.get("1.0", tk.END).strip() with open("output.csv", "w", newline="", encoding="utf-8") as f: # 禁用自动引号处理 writer = csv.writer(f, quoting=csv.QUOTE_NONE, escapechar="") writer.writerow([content]) save_btn = tk.Button(main_window, text="保存到CSV", command=save_to_csv) save_btn.pack() main_window.mainloop()
注意事项
- 如果你的文本包含逗号或换行符,使用
QUOTE_NONE可能会破坏CSV格式(这些是CSV的字段/行分隔符)。这种情况可以选择接受双引号转义的结果(用默认的csv.QUOTE_MINIMAL),或者改用JSON等其他格式存储。 escapechar设为空字符串是因为禁用引号后无需转义字符,若需转义其他字符可指定对应符号。
内容的提问来源于stack exchange,提问作者Elzie
相关产品推荐
相关产品推荐

