tdms格式转换为csv格式的python脚本
'''
执行方法:python tdms2_to_csv.py (tdms文件的路径)
'''
from nptdms import TdmsFile # 导入TdmsFile类,用于操作TDMS文件
import numpy as np # 导入numpy库,用于处理数组数据
import pandas as pd # 导入pandas库,用于数据处理
import sys # 导入sys库,用于获取命令行参数
import os # 导入os库,用于操作文件路径
from pathlib import Path # 导入Path类,用于处理文件路径
def get(f_path):
# 获取父文件夹名称
parent_name = f_path.parent.name
# 构建保存CSV文件的路径
save_path = str(f_path.parent.parent) + "\\csv_data\\" + parent_name
save_name = save_path + "\\" + f_path.name.split(".")[0] + ".csv"
if os.path.exists(save_path):
pass
else:
os.makedirs(save_path)
print("save data dir not exist! make dirs :{}".format(save_path))
df_columns = ['时间 (s)'] # 初始化CSV文件的列,第一列是时间
try:
with TdmsFile.open(f_path, raw_timestamps="True") as tdms_file: # 打开TDMS文件
for group in tdms_file.groups(): # 遍历所有组
group_name = group.name
if len(group.channels()) > 0:
data_len = group.channels()[0]._length
time_str = group.channels()[0].time_track() # 获取时间信息
wf_increment = group.channels()[0].properties['wf_increment'] # 获取采样时间间隔
df_data = time_str
for channel in group.channels(): # 遍历组中的通道
if channel.data_type == None:
continue
else:
spad_Channel_Label_CN = channel.properties['spad_Channel Label_CN'] # 获取通道中文标签
df_columns.append(spad_Channel_Label_CN) # 将通道标签添加到CSV文件的列
channel_name = channel.name
channel = tdms_file[group_name][channel_name] # 根据索引读取通道
channel_data = channel[:] # 获取通道数据
df_data = np.vstack((df_data, channel_data)) # 垂直堆叠数据
else:
print(f_path, "Spd Data Channel Error!")
res = pd.DataFrame(df_data.T, columns=df_columns) # 创建DataFrame,转置数据以匹配列名
res.to_csv(save_name, encoding='gbk', index=False) # 保存为CSV文件
print("Save Parser Data to : {}".format(save_name))
except Exception as e:
print(f_path, e)
def exe(path):
if path.is_file():
get(path) # 如果是文件,直接处理
else:
for file in path.glob('**/*.tdms'):
get(file) # 如果是文件夹,遍历处理所有的TDMS文件
if __name__ == '__main__':
if len(sys.argv) == 2:
file_path = Path(sys.argv[1])
exe(file_path) # 从命令行获取参数并执行
else:
print('Please input right path !') # 提示用户输入正确的路径