Python 将字符串的子列表(csv)转换为浮点(列表理解)

Python 将字符串的子列表(csv)转换为浮点(列表理解),python,string,csv,split,Python,String,Csv,Split,我试图读取一个csv文件,我需要将其转换为一个浮动列表进行评估。列表如下所示: [['Time [s];17063_X;17063_Y;17063_Z;17064_X;17064_Y;17064_Z;17065_X;17065_Y;17065_Z;17067_X;17067_Y;17067_Z;17068_X;17068_Y;17068_Z'], ['0;0.01952;0.04337;0.0242;0.01151;0.04152;0.03236;0.00015;-0.01679;0.05328

我试图读取一个csv文件,我需要将其转换为一个浮动列表进行评估。列表如下所示:

[['Time [s];17063_X;17063_Y;17063_Z;17064_X;17064_Y;17064_Z;17065_X;17065_Y;17065_Z;17067_X;17067_Y;17067_Z;17068_X;17068_Y;17068_Z'], ['0;0.01952;0.04337;0.0242;0.01151;0.04152;0.03236;0.00015;-0.01679;0.05328;0.02872;0.01717;0.09341;0.01452;0.01489;0.07444'], ['0.00042;0.02188;0.04351;0.02803;0.0062;0.04108;0.03312;-0.00529;-0.01412;0.05167;0.02173;0.01377;0.04098;0.00807;0.00246;0.04354'],...]
[['Time [s]', '17063_X', '17063_Y', '17063_Z', '17064_X', '17064_Y', '17064_Z', '17065_X', '17065_Y', '17065_Z', '17067_X', '17067_Y', '17067_Z', '17068_X', '17068_Y', '17068_Z'], [0, 0.01952, 0.04337, 0.0242, 0.01151, 0.04152, 0.03236, 0.00015, -0.01679, 0.05328, 0.02872, 0.01717, 0.09341, 0.01452, 0.01489, 0.07444], ...]
import csv
with open(filepath, 'r') as f:
    reader = csv.reader(f, delimiter = ';')
    # omit the first line  
    for row in reader[1:]:
        da = [float(i) for i in dt]
        print (da)
但实际上,它有超过17000个额外的条目。我需要的列表如下所示:

[['Time [s];17063_X;17063_Y;17063_Z;17064_X;17064_Y;17064_Z;17065_X;17065_Y;17065_Z;17067_X;17067_Y;17067_Z;17068_X;17068_Y;17068_Z'], ['0;0.01952;0.04337;0.0242;0.01151;0.04152;0.03236;0.00015;-0.01679;0.05328;0.02872;0.01717;0.09341;0.01452;0.01489;0.07444'], ['0.00042;0.02188;0.04351;0.02803;0.0062;0.04108;0.03312;-0.00529;-0.01412;0.05167;0.02173;0.01377;0.04098;0.00807;0.00246;0.04354'],...]
[['Time [s]', '17063_X', '17063_Y', '17063_Z', '17064_X', '17064_Y', '17064_Z', '17065_X', '17065_Y', '17065_Z', '17067_X', '17067_Y', '17067_Z', '17068_X', '17068_Y', '17068_Z'], [0, 0.01952, 0.04337, 0.0242, 0.01151, 0.04152, 0.03236, 0.00015, -0.01679, 0.05328, 0.02872, 0.01717, 0.09341, 0.01452, 0.01489, 0.07444], ...]
import csv
with open(filepath, 'r') as f:
    reader = csv.reader(f, delimiter = ';')
    # omit the first line  
    for row in reader[1:]:
        da = [float(i) for i in dt]
        print (da)
到目前为止,我成功地将一行(列表中的最后一个元素)转换成这种格式,但不是全部列表。以下是我到目前为止得到的信息:

import csv

with open(filepath, 'r') as f:
  reader = csv.reader(f)
  data = list(reader)

for j in range(1, len(data)):    # this loop does nothing?!
    for i in data[j]:
    dt = i.split(';')

da = [float(i) for i in dt]
print(da)
输出:

我将感谢任何帮助和一些提示,当涉及到列表理解。 谢谢

试试下面的方法

s=[["a;b;c"],["d;e;f"]]
[x[0].split(';') for x in s]
您将获得:

[['a', 'b', 'c'], ['d', 'e', 'f']]

您需要将最后2行放入
for
循环中,并检查缩进:

for j in range(1, len(data)):
    for i in data[j]:
        dt = i.split(';')
        da = [float(v) for v in dt]
        print(da)

显然,您的csv文件使用了
,而不是

我认为您应该尝试指定csv文件的分隔符。我还没有测试过,但你可以这样做:

[['Time [s];17063_X;17063_Y;17063_Z;17064_X;17064_Y;17064_Z;17065_X;17065_Y;17065_Z;17067_X;17067_Y;17067_Z;17068_X;17068_Y;17068_Z'], ['0;0.01952;0.04337;0.0242;0.01151;0.04152;0.03236;0.00015;-0.01679;0.05328;0.02872;0.01717;0.09341;0.01452;0.01489;0.07444'], ['0.00042;0.02188;0.04351;0.02803;0.0062;0.04108;0.03312;-0.00529;-0.01412;0.05167;0.02173;0.01377;0.04098;0.00807;0.00246;0.04354'],...]
[['Time [s]', '17063_X', '17063_Y', '17063_Z', '17064_X', '17064_Y', '17064_Z', '17065_X', '17065_Y', '17065_Z', '17067_X', '17067_Y', '17067_Z', '17068_X', '17068_Y', '17068_Z'], [0, 0.01952, 0.04337, 0.0242, 0.01151, 0.04152, 0.03236, 0.00015, -0.01679, 0.05328, 0.02872, 0.01717, 0.09341, 0.01452, 0.01489, 0.07444], ...]
import csv
with open(filepath, 'r') as f:
    reader = csv.reader(f, delimiter = ';')
    # omit the first line  
    for row in reader[1:]:
        da = [float(i) for i in dt]
        print (da)

用你拥有的东西工作
csv.reader
可以传递一个分隔符参数

import csv

with open(filepath, 'r') as f:
  reader = csv.reader(f, delimiter=':')
reader
支持在上下文中一次性直接迭代打开的文件句柄,如下所示:

for data in reader:
    print(data)
如果您需要在上下文范围外使用reader中的数据,请将包含其数据的列表绑定到上下文范围内的其他名称

import csv

entries = []
with open(filepath, 'r') as f:
  reader = csv.reader(f, delimiter=':')
  entries = list(reader)
您可以简单地尝试:

data=[['Time [s];17063_X;17063_Y;17063_Z;17064_X;17064_Y;17064_Z;17065_X;17065_Y;17065_Z;17067_X;17067_Y;17067_Z;17068_X;17068_Y;17068_Z'], ['0;0.01952;0.04337;0.0242;0.01151;0.04152;0.03236;0.00015;-0.01679;0.05328;0.02872;0.01717;0.09341;0.01452;0.01489;0.07444'], ['0.00042;0.02188;0.04351;0.02803;0.0062;0.04108;0.03312;-0.00529;-0.01412;0.05167;0.02173;0.01377;0.04098;0.00807;0.00246;0.04354']]


print(list(map(lambda x:list(map(lambda y:y.split(';'),x)),data)))
输出:

[['Time [s]', '17063_X', '17063_Y', '17063_Z', '17064_X', '17064_Y', '17064_Z', '17065_X', '17065_Y', '17065_Z', '17067_X', '17067_Y', '17067_Z', '17068_X', '17068_Y', '17068_Z'], ['0', '0.01952', '0.04337', '0.0242', '0.01151', '0.04152', '0.03236', '0.00015', '-0.01679', '0.05328', '0.02872', '0.01717', '0.09341', '0.01452', '0.01489', '0.07444'], ['0.00042', '0.02188', '0.04351', '0.02803', '0.0062', '0.04108', '0.03312', '-0.00529', '-0.01412', '0.05167', '0.02173', '0.01377', '0.04098', '0.00807', '0.00246', '0.04354']]

谢谢但不幸的是,我得到了一个索引器:列表索引超出范围。你知道为什么吗?几乎完美!现在它在一个列表中创建一个列表,这个列表类似于
[[a,b,c]],[[a,b.c]],…]