在我的for循环.split()只能工作一次

时间:2017-04-17 00:34:26

标签: python list loops csv split

所以我有这个应用程序。它记录加速度计的数据。这是数据的格式。它保存在.csv文件中。

time, x, y, z
0.000000,0.064553,-0.046095,0.353776

这是我程序顶部声明的变量。

length = sum(1 for line in open('couchDrop.csv'))
wholeList = [length]
timeList = [length]#holds a list of all the times
xList = [length]
yList = [length]
zList = [length]

我正在尝试创建四个列表;时间,x,y,z。目前,整个数据文件存储在一个列表中。列表中的每一行包含4个表示时间,x,y和z的数字。我需要将wholeList拆分为四个不同的列表。这是发生这种情况的子程序:

def easySplit():
    print "easySplit is go "
    for i in range (0, length):
        current = wholeList[i]
        current = current[:-2]  #gets rid of a symbol that may be messing tings up
        print current
        print i
        timeList[i], xList[i], yList[i], zList[i] = current.split(',')
        print timeList[i]
        print xList[i]
        print yList[i]
        print zList[i]
        print ""

这是我得到的错误:

Traceback (most recent call last):
  File "/home/william/Desktop/acceleration plotter/main.py", line 105, in          <module>
    main()
   File "/home/william/Desktop/acceleration plotter/main.py", line 28, in main
easySplit()
  File "/home/william/Desktop/acceleration plotter/main.py", line 86, in easySplit
timeList[i], xList[i], yList[i], zList[i] = current.split(',')
IndexError: list assignment index out of range`

另一个奇怪的事情是我的点分裂似乎第一次通过循环工作正常。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

对于像这样的数据操作,我建议使用Pandas。在一行中,您可以将CSV中的数据读入Dataframe。

import pandas as pd
df = pd.read_csv("couchDrop.csv")

然后,您可以轻松地按名称选择每列。您可以将数据操作为pd.Series或操作为np.array或转换为列表。例如:

x_list = list(df.x)

您可以在http://pandas.pydata.org/pandas-docs/stable/10min.html找到有关大熊猫的更多信息。

编辑:原始代码的错误是xList = [length]之类的语法不会创建长度为length的列表。它创建一个长度为一的列表,其中包含一个值为length的单个int元素。

答案 1 :(得分:0)

代码行wholeList = [length]不会创建长度= length的列表。它创建一个只包含一个整数length元素的列表,所以如果你print(wholeList),你只会看到[3] 由于列表在python中是可变的,你可以只对wholeList = []并保持向它添加元素。它不必具有特定的长度。

当你执行从{list}派生的current.split(',')时,它会尝试仅拆分第一次迭代可用的数据,即[3]