You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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])

关键说明:

  1. text.split('\n')把完整文本分割为独立行的列表,替代逐个字符遍历。
  2. newline=''参数避免Windows系统下写入CSV时出现多余空行。
  3. [line]将单行内容包装成列表,确保带逗号的文本(如Length, Width (m): 2.0, 1.0)不会被CSV解析器拆分为多列。
  4. 列表推导式[line for line in ... if line.strip()]过滤掉末尾空行,和期望输出完全匹配。

内容的提问来源于stack exchange,提问作者jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:15:34