Python实现comtrade文件读取

最近在学习python,发现这个语言挺有意思,写起来比较轻松。后面打算用它代替matlab来做数据分析。写了一个comtrade格式录波文件的读取类。目前仅支持读取comtrade的binary格式文件。仅读取模拟量,不解析开关量。上comtrade类代码。

#!/usr/bin/env python 3.8.0
# -*- coding: utf-8 -*-
#
''' ########################################################################'''
import matplotlib.pyplot as plt
import re
import struct

''' ########################################################################
    ##                                                               
    ## COMTRADE文件读取                                                       
    ##                                                               
    ########################################################################'''
    
'''------------------------- 全局变量 -------------------------'''
ERROR   = -1
OK      = 0


class Comtrade():
    """comtrade文件类"""
    
    '''------------------------- 初始化变量 -------------------------'''
    def __init__(self, filename=''):
        #--文件名
        self.file_name = filename
        self.cfg_file_name = filename+'.cfg' 
        self.dat_file_name = filename+'.dat' 
        print("## The cometrade file:"+self.file_name)

        # 列表,存储cfg文件每一行内容
        self.cfglines = []  
        # 模拟量通道数
        self.analog_chanel_num = 0
        # 开关量word数
        self.digit_chanel_num = 0
        # DAT数据格式 BYNARY 或 ASCII
        self.file_format = ''
        # 采样点数
        self.wave_points = 0
        # 字典list
        # cfg模拟量通道信息 字典
        # An,ch-id,ph,ccbm,uu,a,b,skew,min,max,primary,secodary,ps<CR/LF>
        self.ana_infos = []      

        # 每一帧的数据长度 单位BYTE
        # 4, 4,         2,  2,   2,  2,  2,   2
        # n,timestamp,A1,A2,……Ak,D1,D2,……Dm<CR/LF>
        self.dataframe_lenth = 0
        # 二进制数据帧
        self.packed_datas = []
        # 大小端
        self.endian_mode = 'little-endian'
        # 二进制数据解析格式
        self.pack_format = ''

    '''------------------------- 读取CFG文件 -------------------------'''
    def cfg_read(self):
        #--读取CFG文件内容,按行存储至列表
        try:
            with open(self.cfg_file_name) as cfg_file_obj:
                lines = cfg_file_obj.readlines()       
                for line in lines:
                    line = line.rstrip()
                    line = line.split(',')
                    self.cfglines.append(line)  
                    #print(self.cfglines[-1])    
            
        <
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值