python按列读取文本数据

工作需要按照列读取文本文件,解决过程记录如下:

(1)易读写法:

import csv
import numpy as np
with open('imu0.csv','r') as f:
    timestamps=[]
    omega=[]
    alpha=[]
    for row in f.readlines():
        row=row.split(',')
        timestamps.append(row[0])
        omega.append(row[1:4])
        alpha.append(row[4:7])
    timestamps = np.array(map(eval, timestamps))
    #omega = np.array(map(eval, omega))
print(timestamps)
print(omega)

这里按照行读取数据,然后按照逗号分割每行的数据,添加到对应列表中。

但是读取的数据是str类型,需要转为int。这里使用:

map(eval, timestamps)

但是omega无法使用map这种方法,因为其每个元素又是list。

因此可以改为:

import csv
import numpy as np
with open('imu0.csv','r') as f:
    timestamps=[]
    omega=[]
    alpha=[]
    for row in f.readlines():
        row=row.split(',')
        timestamps.append(int(row[0]))
        omega.append(map(eval,row[1:4]))
        alpha.append(map(eval,row[4:7]))
    timestamps = np.array(timestamps)
    omega = np.array(omega)
    alpha = np.array(alpha)

最后因为工程需要转为array类型,输出可以发现,转为array类型后,原来的list里面有元素为list,会变为2维数组。

注意

timestamps.append(map(eval,row[0]))

要改为:

 timestamps.append(int(row[0]))

因为map是针对list,而这里是一个变量,如果使用map会将一个数,安装每一位切为list,


(2)简练写法:

timestamps = [int(row.split(',')[0]) for row in open("imu0.csv")]

可以直接获得某一列。但是int转换数据的时候,不能对list进行转化,因此omega无法使用。

可以改为:

import csv
import numpy as np
timestamps= [int(row.split(',')[0]) for row in open("imu0.csv")]
omega= [map(eval, (row.split(',')[1:4])) for row in open("imu0.csv")]
print(np.array(omega))

你可能感兴趣的:(python)