背景:最近在制作kimera的数据集,尤其是运行semantic模块所需要的bag文件中有很多topic,但是很多不知道topic中装的是什么数据,及其格式,所以我就想着怎么可以将bag中的topic都解析数来,这样就能知道bag中都有啥了.有网友提供了下面的代码,我稍作了些修改,可以在python3下可以顺利运行.如果你的文件夹下有多个bag文件,这个代码可以挨个处理这些bag文件,先为每个bag文件创建一个相应的文件夹,然后把bag文件拷贝进去,然后将bag中的topic都解析为csv格式

#!/usr/bin/python
'''
This script saves each topic in a bagfile as a csv.Accepts a filename as an optional argument. Operates on all bagfiles in current directory if no argument providedWritten by Nick Speal in May 2013 at McGill University's Aerospace Mechatronics Laboratory
www.speal.caSupervised by Professor Inna Sharf, Professor Meyer Nahon'''import rosbag, sys, csv
import time
import string
import os #for file management make directory
import shutil #for file management, copy file#verify correct input arguments: 1 or 2
if (len(sys.argv) > 2):print("invalid number of arguments:   " + str(len(sys.argv)))print("should be 2: 'bag2csv.py' and 'bagName'")print("or just 1  : 'bag2csv.py'")sys.exit(1)
elif (len(sys.argv) == 2):listOfBagFiles = [sys.argv[1]]numberOfFiles = "1"print("reading only 1 bagfile: " + str(listOfBagFiles[0]))
elif (len(sys.argv) == 1):listOfBagFiles = [f for f in os.listdir(".") if f[-4:] == ".bag"]    #get list of only bag files in current dir.numberOfFiles = str(len(listOfBagFiles))print("reading all " + numberOfFiles + " bagfiles in current directory: \n")for f in listOfBagFiles:print(f)print("\n press ctrl+c in the next 10 seconds to cancel \n")time.sleep(10)
else:print("bad argument(s): " + str(sys.argv))  #shouldnt really come upsys.exit(1)count = 0
for bagFile in listOfBagFiles:count += 1print("reading file " + str(count) + " of  " + numberOfFiles + ": " + bagFile)#access bagbag = rosbag.Bag(bagFile)bagContents = bag.read_messages()bagName = bag.filename#/home/yunlei/COOL/kalibr-cde/test/2020-06-13-11-57-29.bag#create a new directory string.rstrip(bagName, ".bag")folder = bagName.split(".bag")[0]try: #else already existsos.makedirs(folder)except:passshutil.copyfile(bagName, folder + '/' + bagName.split('/')[-1])#get list of topics from the baglistOfTopics = []for topic, msg, t in bagContents:if topic not in listOfTopics:listOfTopics.append(topic)for topicName in listOfTopics:#Create a new CSV file for each topic folder + '/' + string.replace(topicName, '/', '_slash_') + '.csv'filename = folder + '/' + topicName.split('/')[-1] + '.csv'with open(filename, 'w+') as csvfile:filewriter = csv.writer(csvfile, delimiter = ',')firstIteration = True   #allows header rowfor subtopic, msg, t in bag.read_messages(topicName): # for each instant in time that has data for topicName#parse data from this instant, which is of the form of multiple lines of "Name: value\n"#   - put it in the form of a list of 2-element listsmsgString = str(msg)msgList = msgString.split('\n')instantaneousListOfData = []for nameValuePair in msgList:splitPair = nameValuePair.split(':')for i in range(len(splitPair)):    #should be 0 to 1splitPair[i] = splitPair[i].strip()instantaneousListOfData.append(splitPair)#write the first row from the first element of each pairif firstIteration:    # headerheaders = ["rosbagTimestamp"]    #first column headerfor pair in instantaneousListOfData:headers.append(pair[0])filewriter.writerow(headers)firstIteration = False# write the value from each pair to the filevalues = [str(t)]    #first column will have rosbag timestampfor pair in instantaneousListOfData:if len(pair) > 1:values.append(pair[1])filewriter.writerow(values)bag.close()
print("Done reading all " + numberOfFiles + " bag files.")

python将ros下bag文件的所有topic解析为csv格式相关推荐

  1. Python遍历目录下的文件(os.walk 、os.listdir的用法)

    Python遍历目录下的文件(os.walk .os.listdir的用法) 最近想从一个目录转移一些文件到另外一个目录,因为文件有指定的后缀,所以想着用python来转移,不做cv工程师,那就涉及到 ...

  2. Python获取当前目录下所有文件的绝对路径并存储在文件中

    Python获取当前目录或者其他指定目录下所有文件的绝对路径并存储在文件中,程序如下: import osfid = open('GetAbsolutePath.txt', 'w')rootdir = ...

  3. python遍历目录下所有文件_Python递归遍历目录下所有文件

    #自定义函数: importos path="D:\\Temp_del\\a" defgci (path):"""this is a statemen ...

  4. python 将目录下的文件和子目录复制到指定文件夹

    递归方法,将某目录下的文件以及该目录的子目录下的文件,复制到指定目录,保持原文件目录 # 将目录的文件复制到指定目录 def copy_demo(src_dir, dst_dir):"&qu ...

  5. 7.python 移动目录下的文件至另一个目录下

    # srcfile 需要复制.移动的文件 # dstpath 目的地址import os import shutil from glob import globdef mymovefile(srcfi ...

  6. python中csv文件添加数据标签_Python对csv格式文件进行数据分析

    csv格式文件数据分析 1.下载数据 1.1下载数据,处理csv格式文件的数据 安装csv模块,在网上下载或者自己写一个csv格式的文件 也可以访问官网,不过很多人下不了这些文档,我这的下载积分只要1 ...

  7. python可以使用二维元组吗_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...

    怎么去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  8. python查看目录下的文件_Python——查看目录下所有的目录和文件

    原博文 2019-05-06 19:31 − 写程序我们经常会遇到需要遍历某一个目录下的所有文件这个操作,然而python有现成的库,只需要2个循环就可以搞定. 1 import os 2 3 def ...

  9. python获取路径下所有文件_Python 之 glob读取路径下所有文件夹或文件方法

    在python中,glob模块是用来查找匹配的文件的 在查找的条件中,需要用到Unix shell中的匹配规则: * : 匹配所所有 ? : 匹配一个字符 *.* : 匹配如:[hello.txt,c ...

最新文章

  1. tcp前4字节消息长度_RocketMQ的消息存储格式
  2. 客户提的功能(需求),不能随口一说就当做,要分析其实质价值,多思考。
  3. 遍历二叉树的神级方法(Morris遍历)
  4. 蓝桥杯java第六届决赛第三题--显示二叉树
  5. linux下将只读文件改为可读可写
  6. 【专场】揭秘端到端视频技术
  7. 安卓第一行代码第3版pdf_SPECFEM2D用户手册——第3章 网格生成——3.1 如何使用SPECFEM2D...
  8. 基于SpringBoot+Vue开发的前后端分离博客项目-Java后端接口开发
  9. nacos服务注册与发现
  10. python基础-函数之装饰器、迭代器与生成器
  11. android person类_es5 类与es6中class的区别小结_javascript技巧
  12. 使用Docker部署前端项目实战教程,该踩的坑我都帮你踩了!
  13. 「缠师课后回复精选」第9课 甄别“早泄”男的数学原则!
  14. Rpg maker mv角色扮演游戏制作大师简介
  15. 环比计算分母为0怎么办?
  16. 目标检测 | YOLO系列超全讲解v1,v2,v3
  17. java工程师怎么找兼职,快来看鸭~
  18. 永远的美女......
  19. jsp+ssm计算机毕业设计电影影评网【附源码】
  20. 虚拟换衣 VITON 论文笔记

热门文章

  1. shell数组中“和@的妙用
  2. The hierarchy of the type UserOperateLogAdvisor is inconsistent
  3. linux基本安全配置手册
  4. listActivity和ExpandableListActivity的简单用法
  5. iframe实现页面无刷新上传文件(PHP)----备忘
  6. Angular自学笔记(?)结构型指令
  7. BZOJ2333 [SCOI2011]棘手的操作 【离线 + 线段树】
  8. ORACLE EBS常用表及查询语句(最终整理版)
  9. 【VC6.0】getline需要输入2次回车才会结束的BUG修复方法
  10. spring官方网站