tdms格式转换为csv格式的python脚本

 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 !')  # 提示用户输入正确的路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙有肥鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值