如何将QTextBrowser文本写入CSV?解决逐字符存储问题
问题
从QTextBrowser提取文本后保存为CSV文件时,每个字符被单独存为一行,希望实现文本的每一行对应CSV的一行。
提取的文本内容:
'Input data\nEnergy (kWh): 1,234\nPower (kWh/y): 12345.0\nLength, Width (m): 2.0, 1.0\n---\nOutput data\nBuildings: 123\nTotal power generation (MWh): 1,234\n\n'
当前代码:
import csv with open('path/to/output.csv', 'w') as csvfile: text = self.dockwidget.textBrowser.toPlainText() writer = csv.writer(csvfile, delimiter='\n') for lines in text: writer.writerow([lines])
期望的CSV文件内容:
Input data Energy (kWh): 1,234 Power (kWh/y): 12345.0 Length, Width (m): 2.0, 1.0 --- Output data Buildings: 123 Total power generation (MWh): 1,234
解决方案
问题核心是直接循环字符串text会逐个取出字符,导致每行只写入一个字符。正确做法是将文本按换行符分割成行列表,再逐行写入:
修正后的代码:
import csv with open('path/to/output.csv', 'w', newline='') as csvfile: text = self.dockwidget.textBrowser.toPlainText() # 按换行符分割文本,过滤空行以匹配期望结果 lines = [line for line in text.split('\n') if line.strip()] writer = csv.writer(csvfile) for line in lines: # 将每行包装为列表,避免含逗号的内容被拆分成多列 writer.writerow([line])
关键说明:
text.split('\n')把完整文本分割为独立行的列表,替代逐个字符遍历。newline=''参数避免Windows系统下写入CSV时出现多余空行。[line]将单行内容包装成列表,确保带逗号的文本(如Length, Width (m): 2.0, 1.0)不会被CSV解析器拆分为多列。- 列表推导式
[line for line in ... if line.strip()]过滤掉末尾空行,和期望输出完全匹配。
内容的提问来源于stack exchange,提问作者jim
相关产品推荐
相关产品推荐

