IEEE C37.118 PMU原始文件的python解析器

2024-10-06 12:06:58 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是来自配电网中的相量测量单元(PMU)设备的样本输出数据。PMU设备基于IEEE C37.118标准。以下是示例3记录:

+---------+---------------+----------+

15:28:59,420,551   ETHER

|0   |f4|03|43|3e|e0|18|00|45|1d|62|5f|f9|08|00|45|00|00|4e|a7|88|00|00|3c|06|35|d3|c0|a8|84|85|0a|14|52|0d|12|68|ee|2c|08|1d|21|f6|27|9a|9b|fa|50|18|20|00|7e|06|00|00|aa|01|00|26|00|06|60|21|58|bb|ff|06|68|20|08|04|f2|48|d7|b1|00|00|00|00|fe|3c|fb|47|fe|37|fb|46|00|04|ff|ff|f2|db|



+---------+---------------+----------+

15:28:59,440,855   ETHER

|0   |f4|03|43|3e|e0|18|00|45|1d|62|5f|f9|08|00|45|00|00|4e|a7|8c|00|00|3c|06|35|cf|c0|a8|84|85|0a|14|52|0d|12|68|ee|2c|08|1d|22|1c|27|9a|9b|fa|50|18|20|00|a5|d5|00|00|aa|01|00|26|00|06|60|21|58|bb|ff|06|b6|00|08|04|f2|4d|d7|b0|00|00|00|00|fe|3c|fb|47|fe|37|fb|46|00|04|ff|ff|7d|02|



+---------+---------------+----------+

有人知道我在哪里可以找到Python实现、PIP包或类似的解析器,可以在一些合理的数据框架中转换这些数据吗? 任何信息都可能有用


Tags: 数据fbeefaf2ffa7a8
1条回答
网友
1楼 · 发布于 2024-10-06 12:06:58

我创建了一个脚本,用于解析这些类型的文件并在Excel中输出它们:

from IPython.core.display import display, HTML
display(HTML("<style>.container { width:100% !important; }</style>"))
import pandas as pd
import numpy as np
import datetime
from datetime import timedelta
import pytz
from datetime import datetime
import pytz
from tzlocal import get_localzone

tz = pytz.timezone('Europe/London')
listofrecords = []
i=0
finalDict = {}
with open("inputData/PMU-Location1.txt",'r') as pmuraw:    
    for line in pmuraw.readlines(): #read in multiple lines
        if len(line.strip())==0:
            continue
        if line.startswith('+    -+       -+     +'):
            record = {}           
        if "ETHER" in line:
            record["Time"],record["Network"] = line.strip().rstrip().split(sep="   ")
        if "|" in line:
            for i, value in enumerate(line.strip().rstrip().split(sep="|")):
                record[i] = value
            record["SYNC"] = int((str(record[56])+" "+str(record[57])).strip().rstrip().replace(" ",""),16)
            record["Packet size"] = int((str(record[58])+" "+str(record[59])).strip().rstrip().replace(" ",""),16)
            record["PMU ID"] =  int((str(record[60])+" "+str(record[61])).strip().rstrip().replace(" ",""),16)
            record["Timestamp"] = datetime.fromtimestamp(int((str(record[62])+" "+str(record[63])+" "+str(record[64])+" "+str(record[65])).strip().rstrip().replace(" ",""), 16)).astimezone(tz).strftime('%d.%m.%Y %H:%M:%S')
            record["Time diff"] = str(timedelta(microseconds = int((str(record[67])+" "+str(record[68])+""+str(record[69])).strip().rstrip().replace(" ",""),16)))[6:]
            record["Status PMU"] =  int((str(record[70])+" "+str(record[71])).strip().rstrip().replace(" ",""),16)
            
            record["Fazor 1"] = int((str(record[72])+" "+str(record[73])+" "+ str(record[74])+" "+str(record[75])).strip().rstrip().replace(" ",""),16)
            record["Fazor 2"] =  int((str(record[76])+" "+str(record[77])+" "+ str(record[78])+" "+str(record[79])).strip().rstrip().replace(" ",""),16)
            record["Fazor 3"] =  int((str(record[80])+" "+str(record[81])+" "+ str(record[82])+" "+str(record[83])).strip().rstrip().replace(" ",""),16)
            record["Fazor 4"] =  int((str(record[84])+" "+str(record[85])+" "+ str(record[86])+" "+str(record[87])).strip().rstrip().replace(" ",""),16)
            record["Frequency"] =  int((str(record[88])+" "+str(record[89])).strip().rstrip().replace(" ",""),16)
            record["Delta freq"] =  int((str(record[90])+" "+str(record[91])).strip().rstrip().replace(" ",""),16)        
            remove = [k for k in record if isinstance(k, (int, np.integer))]
            for k in remove: del record[k]            
            listofrecords.append(record)           


PMU-Location1DF = pd.DataFrame(listofrecords)
PMU-Location1DF.to_excel("outputData/PMU-Location1.xlsx",sheet_name='PMU Žerjavinec', encoding='UTF-8')

相关问题 更多 >