python对csv文件进行数据读写操作汇总

 csv文件

二进制写入模式 wb(如果已创建将清空数据,谨慎使用!)

二进制添加模式 ab

二进制读取模式 rb

写入的话可以直接按照二维数组写入,第一行写入每列的名称以便参考

#!/usr/bin/env python
import rospy
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import rospkg
import csv
import sys
if __name__ == '__main__':
    rospy.init_node('AutoSaveCSV', anonymous=True)
    rospack = rospkg.RosPack()
    path = rospack.get_path('xxx')
    rate = rospy.Rate(0.1) # 1hz
    comparisonmap=[]
    
    while not rospy.is_shutdown():
            now = datetime.now()
            date_time = now.strftime("%Y%m%d")
            csv_name = 'prefix'+date_time+'.csv'
            csvfile = file(path+'/experiment/'+ csv_name, 'wb')
            csvfile.write(u'\ufeff'.encode('utf8'))
            writer = csv.writer(csvfile)
            writer.writerow(['id','est_x', 'y','qz','qw','ref_x', 'y','qz','qw','best_x','best_y','best_z','energy','vt_id'])
            path = np.array(map).astype(float)
            writer.writerows(path)
            csvfile.close()
            print 'save to file ',csv_name,' ' ,len(comparisonmap)
        rate.sleep()

读取的时候需要进行额外操作:

from ast import literal_eval

next(reader_ls, None)#skip first line 

np.array(literal_eval(row[2])).astype(float) 将含有[]中括号的二维数组或者list字符串转换为二维float数组

    now = datetime.now()
    date_time = now.strftime("%Y%m%d")
    rospack = rospkg.RosPack()
    path = rospack.get_path('xxx')
    csv_name_ls = 'filename.csv'
    csvfile_ls = open(path+'/experiment/'+ csv_name_ls, 'rb')
    reader_ls = csv.reader(csvfile_ls)
    print 'laserscan data import from ',csv_name_ls
    next(reader_ls, None)#skip first line
    #'t','id', '[range angle]'
    for row in reader_ls:
        row_arr = np.array(row[0:2]).astype(float)
        if row[2] != '[]':
            laser_arr = np.array(literal_eval(row[2])).astype(float)
            laser_scan=[]
            for i in np.arange(0,laser_arr.shape[0],skip_ls):
                laser_scan.append(laser_arr[i])
            exp = experience(laser_scan,int(row_arr[1]))
        else:
            exp = experience(None,int(row_arr[1]))        
        laserscan_list.append(exp)
  

猜你喜欢

转载自blog.csdn.net/li4692625/article/details/115474981