使用数组从Python创建CSV时出现问题

2024-05-14 00:38:48 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个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

现在,此代码为生成“iterable”错误编写器.writerow(出口线)。你知道吗

因此,我将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)它只生成最后一个数据点。。。作为一个单元格中的数组。。。你知道吗

我的头撞到墙上了。你知道吗


Tags: csv数据代码示例outputtitle数字数组
2条回答

这对我有用。你知道吗

注意在open块中添加newline=''会阻止在文件的每一行之间添加空行。你知道吗

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,您也可以尝试在leu中使用.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)

所以我想出来了。皮特在上面展示的代码(带writerows)非常完美。它解决了将整个阵列放在一个单元中的棘手问题。它给出iterable错误的原因与代码无关。事实上,我有点怀疑每个单元格中的数组可能也不是代码,但我懒得回去检查,因为它现在正在工作。问题是时机。你知道吗

我有一个基于计时器的while循环中的DAQ记录过程。用户输入测试的总时间和要进行测量的时间间隔。循环以总时间作为其参数,在每个循环开始时检查经过的时间,如果在间隔范围内,则将数据从DAQ记录到数组中。你知道吗

整个记录DAQ数据的过程显然需要一些时间。如果用户输入的间隔小于3秒(我做了一些测试),程序将进入一个周期的DAQ记录,当它出来时,它错过了下一个记录窗口,所以它跳过它。基本上,它每隔一个周期(或更少)录制一次。你知道吗

这是一个问题,因为我必须使用

RecordedData = [0 for i in range(1, NumTestCycles)]

这意味着我有一个满是零的数组。因为时间问题导致它每隔一个周期记录一次,所以当它到达CSV导出时,数组的一半仍然是零。CSV很好地提取了该数组的数组,但是它得到了零,并弹出“iterable expected,not int”错误,因为它需要一个数组,得到了一个零。你知道吗

我偶然发现了这个,但我现在知道,如果我运行的间隔为4秒或更多没有错误,我得到了一个完美的文件。你知道吗

谢谢你在这方面的帮助!你知道吗

相关问题 更多 >