【问题标题】:Python Nested For Loop CSV FilePython 嵌套 For 循环 CSV 文件
【发布时间】:2016-11-15 04:46:59
【问题描述】:

此代码仅在我想遍历所有行以获取数据中的列数时才遍历行数,我很困惑为什么它不遍历行 7 次。

import  csv
from    mpl_toolkits.mplot3d import axes3d
import  matplotlib.pyplot   as  plt
import  numpy   as  np

sensorData      =   []
longitudinal    =   []
transverse      =   []

n=0
with open('test3.csv') as csvfile:
     readCsv = csv.reader(csvfile, delimiter =',')
     for x in range(0,7):    #problem HERE
         for row in readCsv:
             n+=1
             sensorData.append(float(row[x]))

             longitudinal.append(n)

             transverse.append(x)

【问题讨论】:

  • 您希望 csv 文件中包含哪些数据?该行是否有 7 个项目?
  • 是的,csv 包含特定数量的列,正好是 7
  • 您的 for 循环顺序错误。您正在尝试读取整个 CSV 文件 7 次,而不是遍历每一行的列
  • 我想专门订购它们,以便可以将它们绘制在 3d 图上。我在想最简单的方法是采用 [longitudinal,transverse,data] 格式。我从横向位置 (y) 的相同纵向 (x) 距离上读取 7 个模拟通道,每个通道都有不同的模拟测量值。

标签: python python-3.x csv matplotlib


【解决方案1】:

您的代码有一个将循环 7 次的外循环,而内循环将遍历每一行。您需要交换内部和外部循环。

对于每一列的每一行循环

with open('test3.csv') as csvfile:
     readCsv = csv.reader(csvfile, delimiter =',')
     for row in readCsv:
         for x in range(0,7):
             n+=1
             sensorData.append(float(row[x]))

【讨论】:

  • 对为什么原始代码错误的一些解释会很好(是的,这对我们来说很明显,但他们不会问这对他们来说是否明显)
【解决方案2】:

一旦你读取了文件中的所有行,文件数据就用完了,没有什么可读取的了,所以你的for row in readCsv:循环立即终止。

如果您想重置文件并重新读取它,您需要关闭该文件并再次打开它。

【讨论】:

    【解决方案3】:

    这里有类似的问题:Reading from CSVs in Python repeatedly?

    循环完文件后,需要重新设置 csvfile 的读取位置。

        csvfile.seek(0)
    

    【讨论】:

    • 谢谢!在外部 for 循环的末尾添加此行后,它按预期工作。
    • 我会 100% 支持这个但是,我没有必要的声誉 (15) 来支持...
    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多