首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用数组的Array从Python创建CSV时出现问题

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

Stack Overflow用户
提问于 2018-07-15 10:39:19
回答 2查看 153关注 0票数 2

所以我有一个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),它只生成最后一个数据点……作为一个单元格中的数组...

我把头撞在墙上了。

EN

回答 2

Stack Overflow用户

发布于 2018-07-15 11:42:57

这对我很有效。

注在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)
票数 0
EN

Stack Overflow用户

发布于 2018-07-18 23:52:15

所以我想通了。上面Pete展示的代码(使用writerows)是完美的。它解决了将整个数组放在一个单元格中的时髦问题。它给出可迭代错误的原因与代码无关。事实上,我怀疑每个单元格中的数组可能也不是代码,但是我懒得回去检查它,因为它现在正在工作。问题出在时机上。

我将DAQ记录过程封装在一个基于计时器的while循环中。用户输入测试的总时间和他们想要进行测量的时间间隔。循环以总时间作为参数运行,在每个循环开始时,它检查经过的时间,如果它在间隔范围内,则将来自DAQ的数据记录到数组中。

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

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

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

这意味着我一开始就有一个满是零的数组。由于计时问题导致它每隔一个周期记录一次,因此当它到达CSV导出时,阵列的一半仍然为零。CSV可以很好地拉取该数组的数组,但随后它会到达零,并弹出"iterable expected,not int“错误,因为它需要的是一个数组,但得到的是零。

我偶然发现了这一点,但我现在知道,如果我运行时间间隔为4秒或更长时间,就不会出现错误,我会得到一个完美的文件。

感谢您在这方面的所有帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51344821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档