所以我有一个python,它从各种DAQ单元中收集数据点,而我要做的就是将它们吐到CSV中。我的代码可以完美地与示例数组配合使用,但是现在我无法继续使用它。
这就是我所拥有的:
with open(FileName, "w") as output:
writer = csv.writer(output, delimiter = ',')
writer.writerow(Header)
i = 0
TotalRuns = NumTestCycles
while i < TotalRuns:
ExportLine = RecordedData[i]
writer.writerow(ExportLine)
i = i + 1
现在,此代码为writer.writerow(ExportLine)产生“可迭代”错误。
因此,我将ExportLine包装在[]中,并生成我的CSV,但是每一行都显示为
[232, 233, 234, 235, 236, 237]
在每个单元格中,而不是每个单元格中的单个数字。
我的阵列设置为
RecordedData = [[232,233,234,235,236,237],[232,233,234,235,236,237]]
我想要的只是我的excel工作表看起来像这样:
Title 1 | Title 2 | Title 3 | Title 4 | Title 5 | Title 6
----------------------------------------------------------
232 | 233 | 234 | 235 | 236 | 237
----------------------------------------------------------
232 | 233 | 234 | 235 | 236 | 237
我在这里想念什么?为什么用我的字符串数组而不是数字数组正确地吐出一行?
我已经尝试过for循环方法,它只会在每个单元格中产生一个带有子数组的大量行。我尝试了writer.writerows(RecordedData),它只产生最后一个数据点...作为一个单元格中的数组...
我在这里撞墙。
答案 0 :(得分:0)
这对我有用。
请注意,在newline=''
块中添加open
可以防止在文件的每一行之间添加空白行。
import csv
RecordedData = [[232,233,234,235,236,237],[232,233,234,235,236,237]]
Header = 'Title 1', 'Title 2', 'Title 3', 'Title 4', 'Title 5', 'Title 6'
with open('test.csv', "w", newline='') as csv_file:
writer = csv.writer(csv_file, delimiter=',')
i = 0
writer.writerow(Header)
TotalRuns = 1 #Changed to assumed NumTestCycles value from example data give
while i <= TotalRuns:
ExportLine = RecordedData[i]
writer.writerow(ExportLine)
i += 1
Excel的输出:
A | B | C | D | E | F
----------------------------------------------------------
Title 1 | Title 2 | Title 3 | Title 4 | Title 5 | Title 6
----------------------------------------------------------
232 | 233 | 234 | 235 | 236 | 237
----------------------------------------------------------
232 | 233 | 234 | 235 | 236 | 237
*已编辑以包含标题行
*编辑2,您也可以在遍历列表时尝试使用.writerows()
,这样可以解决您的错误。
import csv
RecordedData = [[232,233,234,235,236,237],[232,233,234,235,236,237]]
Header = 'Title 1', 'Title 2', 'Title 3', 'Title 4', 'Title 5', 'Title 6'
with open('test.csv', "w", newline='') as csv_file:
writer = csv.writer(csv_file, delimiter=',')
writer.writerow(Header)
TotalRuns = 1 #Changed to assumed NumTestCycles value from example data give
writer.writerows(RecordedData)
答案 1 :(得分:0)
所以我知道了。上面显示的Pete代码(带有writerows)是完美的。它解决了将整个阵列放在一个单元中的时髦问题。产生可迭代错误的原因与代码无关。实际上,我有点怀疑每个单元中的数组也可能不是代码,但是我懒得回过头来检查一下,因为它现在可以工作了。问题是时机。
我将DAQ记录过程打包成一个基于计时器的while循环。用户输入测试的总时间和他们想要进行测量的时间间隔。循环以总时间作为其性能指标,并在每个循环的开始时检查经过时间,并且是否在间隔时间范围内,将数据从DAQ记录到数组中。
记录DAQ数据的整个过程显然需要一些时间。如果用户输入的间隔少于3秒(我进行了一些测试),则该程序将在一个周期进入DAQ记录,而到它出来时,它错过了下一个记录的窗口,因此跳过了该记录。基本上,它每隔一个周期(或更少)记录一次。
这是一个问题,因为我必须使用
初始化数组RecordedData = [0 for i in range(1, NumTestCycles)]
这意味着我首先要有一个充满零的数组。由于时序问题导致它每隔一个周期进行记录,因此数组的一半在到达CSV导出时仍为零。 CSV可以很好地拉出该数组的数组,但随后它会变为零,并弹出“可迭代的期望值,而不是int”错误,因为它希望得到一个数组并得到一个零。
我是偶然发现的,但是现在我知道,如果将间隔时间设置为4秒或更长时间,就不会出现错误,并且我得到了一个完美的文件。
谢谢您的帮助!