使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本
使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本
文章目录
- 使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本
- 前言:
- 背景
- tmds文件样式
- 代码:
- 进程池版本:
- 联系方式
前言:
更新,一直想试试进程池,因为看了B站的课程后,发现进程池比传统的multiprocess模块要方便多了,还快多了,就一直想试试,之前没有合适的例子,强化学习的部分,因为涉及到的东西太多,也没法当个简单的例子去测试。
刚好昨天做这个转换的时间非常长,典型的计算资源消耗型的任务,因此想着能不能利用起进程池,走一次流程。
试了一下果然效果拔群!
直接用nptdms模块读取的时候,如果你的tdms文件 not valid的话,会报错:
1). ValueError: Segment does not start with TDSm, but with $ '
2). ValueError: Segment does not start with TDSm, but with " %
原因是:
It sounds like you are trying to read files that are not valid TDMS files, as they don’t start with the first four TDSm bytes that should be at the beginning of all TDMS files.
参考链接:
https://github.com/adamreeve/npTDMS/issues/123
因此我只好选择最基本的文件读取方式,按行读取,手动处理为pandas的格式,然后保存为excel的文件格式。
背景
Labview的TMDS格式文件在很多偏硬件相关的工作中经常出现,有时候面临将TDMS转成Excel通用格式的情况,正常来讲Excel只要装有TDMS插件读取是没有问题的,然而面对大量TDMS文件的时候,手动一个个将TDMS文件转成Excel文件显然很浪费时间,以下介绍使用Python配合pandas,xlsxwriter将TMDS文件批量转成Excel文件的方法:
tmds文件样式
其实就是数字+制表符+换行符的一个内容,按照最基本的文本读取,加上替换,就能完成格式转换。
974.832 1012.613 1016.344 1012.713 1012.009 1015.501 1000.094 1012.158 1011.943 1026.974 1011.168 1011.470 974.860 1011.517 1012.005 1062.471 1011.013 970.696 1012.960 1011.206 1011.439 1003.868 1011.456 1013.407 1011.972 1010.859 1011.276 1024.039 1039.353 1011.088 1012.036 1010.735 1011.564 1011.131 1011.837 1012.786
974.865 1012.567 1016.372 1012.719 1011.996 1015.527 1000.109 1012.148 1011.952 1026.951 1011.189 1011.471 974.846 1011.503 1012.065 1062.495 1011.044 970.726 1012.951 1011.242 1011.460 1003.885 1011.459 1013.423 1011.970 1010.856 1011.310 1024.043 1039.399 1011.112 1012.026 1010.742 1011.571 1011.164 1011.808 1012.732
974.862 1012.610 1016.382 1012.736 1012.038 1015.497 1000.135 1012.132 1011.952 1026.975 1011.145 1011.454 974.825 1011.512 1012.047 1062.503 1011.046 970.711 1012.946 1011.243 1011.487 1003.897 1011.468 1013.414 1012.003 1010.875 1011.280 1024.038 1039.380 1011.098 1012.008 1010.776 1011.573 1011.166 1011.865 1012.772
974.841 1012.577 1016.365 1012.700 1012.008 1015.509 1000.092 1012.156 1011.984 1026.962 1011.171 1011.443 974.826 1011.567 1012.039 1062.488 1011.032 970.715 1012.983 1011.187 1011.442 1003.905 1011.448 1013.408 1011.974 1010.837 1011.264 1024.038 1039.415 1011.086 1012.042 1010.779 1011.574 1011.141 1011.826 1012.772
代码:
import xlwt
import codecs
import os
"""
├─tdms_scripts
│ ├─excel
│ └─tdms
│──tmds2excel.py
"""# 改为你的tmds文件夹!的路径,比如0静止
root_path = r'F:\rl_code\tdms_scripts'
# 修改这里,第0个为1,第1个从1001开始
task_num = 0
# 创建一个excel文件夹
try:os.mkdir(os.path.join(root_path, 'excel'+str(task_num)))
except:pass
tdms_files = os.listdir(os.path.join(root_path, 'tdms'))
# 将文件名从小到大排序
tdms_files.sort()
# [print(t) for t in tdms_files]file_count = 1 + task_num * 1000
for tdms_file in tdms_files:print("tdms_file:", tdms_file, end='\t')sheetName = 'Sheet1'start_row = 0start_col = 0wb = xlwt.Workbook(encoding = 'utf-8')ws = wb.add_sheet(sheetName)tdms_path = os.path.join(root_path, 'tdms', tdms_file)f = open(tdms_path, encoding = 'utf-8')row_excel = start_rowfor line in f:# 消除换行符line = line.strip('\n')# 以制表符'\t'作为切分对象,将长字符串,转为短字符串列表;# 如果原数据用空格切分,则line = line.split(' ')line = line.split('\t')col_excel = start_collen_line = len(line)for j in range(len_line): ws.write(row_excel,col_excel,line[j])col_excel += 1excel_path = os.path.join(root_path, 'excel'+str(task_num), str(file_count)+'.xls') # 如果用原名,用下面的句子# excel_path = os.path.join(root_path, 'excel', tdms_file.replace('tdms', 'xls')) wb.save(excel_path)row_excel += 1f.closeprint("excel_path:", excel_path)file_count += 1
进程池版本:
由于单个文件处理时间过长,因此写了一个多进程版本的处理脚本。
可以CPU核心数倍加速处理!
from multiprocessing import Pool
import xlwt
import codecs
import os
import time
"""
├─tdms_scripts
│ ├─excel
│ └─tdms
│──tmds2excel.py
"""# 改为你的tmds文件夹!的路径,比如0静止
root_path = r'F:\rl_code\calibration\tdms_scripts'
# 修改这里,第0个为1,第1个从1001开始
task_num = 0
# 创建一个excel文件夹
try:os.mkdir(os.path.join(root_path, 'excel'+str(task_num)))
except:pass
tdms_files = os.listdir(os.path.join(root_path, 'tdms'))
# 将文件名从小到大排序
tdms_files.sort()
# [print(t) for t in tdms_files]file_count = 1 + task_num * 1000def tdms2excel(tdms_index_file):st = time.time()index, tdms_file = tdms_index_fileprint("tdms_file:", tdms_file, end='\t')sheetName = 'Sheet1'start_row = 0start_col = 0wb = xlwt.Workbook(encoding = 'utf-8')ws = wb.add_sheet(sheetName)tdms_path = os.path.join(root_path, 'tdms', tdms_file)f = open(tdms_path, encoding = 'utf-8')row_excel = start_rowfor line in f:# 消除换行符line = line.strip('\n')# 以制表符'\t'作为切分对象,将长字符串,转为短字符串列表;# 如果原数据用空格切分,则line = line.split(' ')line = line.split('\t')# print("line:", line)col_excel = start_collen_line = len(line)for j in range(len_line): ws.write(row_excel, col_excel, line[j])col_excel += 1excel_path = os.path.join(root_path, 'excel'+str(task_num), str(index)+'.xls') # 如果用原名,用下面的句子# excel_path = os.path.join(root_path, 'excel', tdms_file.replace('tdms', 'xls')) wb.save(excel_path)row_excel += 1f.closeprint("excel_path:", excel_path, end='\t')print("trans_time:", time.time()-st)if __name__ == '__main__':p = Pool() p.map(tdms2excel, [[index, tdms_file] for index, tdms_file in enumerate(tdms_files)])
我的笔记本是八核2.6Ghz的CPU,单个进程的处理时间在20-30秒之间,我用了进程池之后,八个进程一起执行,可以很明显的看到每隔8个,有一个时间分层,八个小工轮着干的效果就体现出来了~
这个比手动打开八个脚本,利用Python新开的脚本自动在另外的CPU核心运行的特性,利用其他CPU核心的方法,要优雅多了~
运行效果:
tdms_file: 1_2021_02_21_22_41_15.tdms excel_path: …cel0\0.xls single_time: 27.0803 total_time: 27.0957
tdms_file: 1_2021_02_21_22_41_58.tdms excel_path: …cel0\4.xls single_time: 27.4848 total_time: 27.5031
tdms_file: 1_2021_02_21_22_41_39.tdms excel_path: …cel0\2.xls single_time: 28.6732 total_time: 28.6935
tdms_file: 1_2021_02_21_22_41_48.tdms excel_path: …cel0\3.xls single_time: 29.9796 total_time: 29.9925
tdms_file: 1_2021_02_21_22_41_26.tdms excel_path: …cel0\1.xls single_time: 30.8471 total_time: 30.8605
tdms_file: 1_2021_02_21_22_42_24.tdms excel_path: …cel0\7.xls single_time: 31.049 total_time: 31.0644
tdms_file: 1_2021_02_21_22_42_14.tdms excel_path: …cel0\6.xls single_time: 32.2027 total_time: 32.2215
tdms_file: 1_2021_02_21_22_42_05.tdms excel_path: …cel0\5.xls single_time: 33.8177 total_time: 33.8405
tdms_file: 1_2021_02_21_22_42_32.tdms excel_path: …cel0\8.xls single_time: 33.5036 total_time: 60.6003
tdms_file: 1_2021_02_21_22_43_05.tdms excel_path: …el0\12.xls single_time: 29.8122 total_time: 60.6732
tdms_file: 1_2021_02_21_22_44_03.tdms excel_path: …el0\14.xls single_time: 28.4923 total_time: 60.7139
tdms_file: 1_2021_02_21_22_42_40.tdms excel_path: …cel0\9.xls single_time: 33.4553 total_time: 60.9589
tdms_file: 1_2021_02_21_22_43_54.tdms excel_path: …el0\13.xls single_time: 29.904 total_time: 60.9688
tdms_file: 1_2021_02_21_22_44_14.tdms excel_path: …el0\15.xls single_time: 28.3613 total_time: 62.2024
tdms_file: 1_2021_02_21_22_42_57.tdms excel_path: …el0\11.xls single_time: 34.8927 total_time: 64.8862
tdms_file: 1_2021_02_21_22_42_49.tdms excel_path: …el0\10.xls single_time: 39.0403 total_time: 67.7338
tdms_file: 1_2021_02_21_22_44_58.tdms excel_path: …el0\20.xls single_time: 25.6077 total_time: 86.577
tdms_file: 1_2021_02_21_22_44_36.tdms excel_path: …el0\17.xls single_time: 30.7522 total_time: 91.4259
tdms_file: 1_2021_02_21_22_44_44.tdms excel_path: …el0\18.xls single_time: 33.2317 total_time: 93.9461
tdms_file: 1_2021_02_21_22_44_51.tdms excel_path: …el0\19.xls single_time: 33.3145 total_time: 94.2744
tdms_file: 1_2021_02_21_22_44_28.tdms excel_path: …el0\16.xls single_time: 34.4439 total_time: 95.0447
tdms_file: 1_2021_02_21_22_45_12.tdms excel_path: …el0\22.xls single_time: 33.2763 total_time: 98.1626
tdms_file: 1_2021_02_21_22_45_05.tdms excel_path: …el0\21.xls single_time: 37.2711 total_time: 99.4745
tdms_file: 1_2021_02_21_22_45_19.tdms excel_path: …el0\23.xls single_time: 34.0878 total_time: 101.8221
tdms_file: 1_2021_02_21_22_45_27.tdms excel_path: …el0\24.xls single_time: 30.2179 total_time: 116.7959
tdms_file: 1_2021_02_21_22_45_35.tdms excel_path: …el0\25.xls single_time: 25.7747 total_time: 117.2011
tdms_file: 1_2021_02_21_22_45_56.tdms excel_path: …el0\28.xls single_time: 25.1771 total_time: 120.2228
tdms_file: 1_2021_02_21_22_45_42.tdms excel_path: …el0\26.xls single_time: 26.8273 total_time: 120.7738
tdms_file: 1_2021_02_21_22_45_50.tdms excel_path: …el0\27.xls single_time: 27.3055 total_time: 121.5819
tdms_file: 1_2021_02_21_22_46_03.tdms excel_path: …el0\29.xls single_time: 23.8782 total_time: 122.0407
联系方式
ps: 欢迎做强化的同学加群一起学习:
深度强化学习-DRL:799378128
欢迎关注知乎帐号:未入门的炼丹学徒
CSDN帐号:https://blog.csdn.net/hehedadaq
使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本相关推荐
- 利用ffmpeg将avi格式文件转成mp4格式
简介:在一些场景中,需要将avi格式文件转成mp4格式.可以使用ffmepg进行处理.同理,针对某文件夹目录下所有的文件进行处理,推荐使用 os.walk(). 相关攻略: 1.win10:安装ffm ...
- 如何将GeoJson格式文件转换成Tab格式的MapInfo数据文件
前言 GeoJson格式文件:GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间 ...
- 怎么把PDF格式文件转换成PPT格式
我们经常会遇到不同格式转换的问题,如怎么办PDF格式文件转换成PPT格式,往往急于找不到有效的方法,事实上,要把PDF文件转换成PPT是非常简单的工作.下面小编就为大家分享一个最新最有效的办法.希望能 ...
- 使用Python读取LabVIEW TDMS 格式文件转成 pandas及Excel
个人用Django开发的博客已上线,欢迎访问:https://www.zhibibin.com Labview的TMDS格式文件在很多偏硬件相关的工作中经常出现,有时候面临将TDMS转成Excel通用 ...
- 如何免费把vcf文件转换成excel格式
vcf文件怎么转成excel这篇文章有网友评论说不想花钱.那么我们就来讲一讲vcf文件怎么转成excel格式不花钱. 默认20条内容不收费 九雷VCF转换器支持一键批量把VCF通讯录文件转换成Exce ...
- 怎样有效的将电脑中WPS文件转换成Excel格式
要知道在WPS软件中新建的表格编辑好后保存的文件在发送给其他人,别人点击文件却发现无法打开WPS格式的文件,原因是电脑中没有安装WPS的原因.要想查看文件内的内容难道只有在电脑下载WPS软件一种方法吗 ...
- docx格式文件转成doc格式文件时保持公式可编辑状态的方法
0 提出问题 现在很多论文投稿甚至是毕业论文都要求doc格式的文档(Word2003以前的版本文档),如果大家像我一样习惯使用WPS或者更高级版本的Word,并且在编辑公式过程中未使用MathType ...
- ofd格式文件转换成pdf格式的方法
ofd格式文件很多人还比较陌生,很多人接收到文件都不知如何打开阅读,把文件发给对方,还需要对方安装个专门的阅读软件,我们还有另一个办法,就是将OFD文件转换为PDF格式文件,然后把PDF格式文件发给对 ...
- 如何在电脑中将PDF文件转换成Excel格式?分享三个好用的方法!
随着PDF格式的广泛使用,越来越多的人需要将PDF文件转换为Excel格式,以便更轻松地编辑和分析数据.在这篇文章中,我们将介绍三种常见的方法来将PDF文件转换为Excel格式. 1.使用Adobe ...
最新文章
- OpenCV Mat矩阵(图像Mat)初始化及访问方法
- 什么是线程安全,你真的了解吗?
- stl max函数_std :: max_element()函数以及C ++ STL中的示例
- python docker_Docker实践:python应用容器化
- bootstrap-表格-普通表格
- 从统计代码来谈JS加载的优化
- NI myRIO-1900(ARM9)嵌入式小车2015.8-9
- Weblogic之简介
- 如何安装2个版本的python
- byte转换字符串(string)+字符串转换byte
- Gitflow Git工作流
- 软考-系统分析师知识大纲及分数
- 乒乓球侧旋球MATLAB,浅说细谈乒乓球力学(一)
- 浙江大学副教授杨洋——《Time2Graph:从图视角出发的时间序列建模》
- cout 输出 uint8_t 整形值
- Solidworks绘制齿轮过程备注
- 洛谷 P3387(缩点后+处理 )
- java做网站需要什么_java怎么做网站?java做网站要掌握哪些技术?
- 如何通过思维导图分析问题的6款优秀模板鉴赏
- DNS优化工具 namebench