【问题标题】:Problems Creating CSV from Python with Array of Arrays使用数组数组从 Python 创建 CSV 的问题
【发布时间】:2018-12-22 23:56:35
【问题描述】:

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

我在这里撞墙了。

【问题讨论】:

  • 您说“我将 ExportLine 包装在 [] 中”是什么意思?你能告诉我们那个代码吗?
  • blhsing,对不起。到我写这篇文章的时候,我的眼睛又干又红,而且我已经连续 6 个多小时在屏幕上看到隧道视觉。我想的不是很清楚。这就是我的意思:
  • while i

标签: python arrays csv


【解决方案1】:

这对我有用。

注意在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)

【讨论】:

  • Pete,所以如果我运行它,如图所示,我会得到“iterable expected, not int”错误。那么我只是做“writer.writerow([ExportLine])”的改变和......同样的事情。我得到了很好的行,但每一行都是一个单元格,整个数组保存到 ExportLine 中的一个单元格中,包含在 [] 中(正是我之前展示的)。现在,为了好玩,我尝试将数组转换为 str,结果非常有趣。它把每个数字(小数、10 位、100 位、第 10 位、第 100 位)放在自己的单元格中。这就像每个单元格中的一个字符。行不通,但很有趣。
  • Pete,我肯定漏掉了一些基本的东西。当我在编辑#2 中打孔时,我仍然得到错误:预期可迭代,而不是 int
  • @InjuNear 您是否将代码放入您的项目中?还是单独运行它以查看它是否适用于您的系统?
  • 放到项目里,我一个人跑过去汇报。
  • 我要去找一座好的高桥跳下去……JK……有点像。所以我在一个测试程序中运行了你的代码,它运行得很好。所以我想“WTF?”。所以我注释掉了我的代码,这是逐字记录你的代码,复制粘贴你的代码只是为了好玩,运行它并且......完美。第一次尝试。我不知道为什么我很烂,但我爱你在这件事上救了我。谢谢!
【解决方案2】:

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

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

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

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

初始化我的数组
RecordedData = [0 for i in range(1, NumTestCycles)]

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

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

感谢您为此提供的所有帮助!

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2022-10-15
    • 2021-08-13
    • 2017-02-03
    相关资源
    最近更新 更多