Python CSV编写器为每个数据项创建新行

3qpi33ja  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(111)

我在Raspberry Pi上运行Python 3.9.2,并编写了一个脚本,用于读取锅炉的水温并将其写入CSV文件,但是,输出文件中的每个数据项都显示在新的一行中。
下面是我的代码:

from subprocess import check_output
import csv
header = ['Flow', 'Return']
cmd = ["/usr/bin/ebusctl", "read", "-f"]
data = [
   [float(check_output([*cmd, "FlowTemp", "temp"]))],
   [float(check_output([*cmd, "ReturnTemp", "temp"]))]
]
with open('sandbox.csv', 'w', encoding='utf8', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    writer.writerows(data)

下面是sandbox.csv的内容:

Flow,Return
57.19
43.12

我该怎么解决这个问题?

ktca8awb

ktca8awb1#

CSV文件每行包含一条 * 记录 *。
writerow方法将一个记录写入文件,该文件期望被表示为值 * 的一个列表或元组 *,例如,对于一个记录a, b, c

[a, b, c]

writerows方法一次对多个记录进行相同的操作,它期望将这些记录表示为记录 * 的列表或元组 *,例如,对于两个记录a, b, cx, y, z

[[a, b, c], [x, y, z]]

传递给writerows的数据的结构如下:

[[Flow], [Return]]

这意味着writerows将向文件中写入两条记录(每条记录占一行),每条记录仅包含一个值。
如果您希望Flow, Return是 * 一个 * 记录(写入一行),则需要对数据进行不同的结构化:

  • 您可以创建data = [Flow, Return](单个记录)并将其传递给writerow
  • 或者创建data = [[Flow, Return]](记录列表,只包含一条记录)并将其传递给writerows

相关问题