在python中读取.dat文件

Pul*_*gar 6 python regex mdf file-handling

我有一个 .dat 文件,我不知道它是如何创建的,使用了什么分隔符以及有关它的任何详细信息。我只有相应的 mdf 和 csv 文件。就这样。python中有什么方法可以读取这个.dat文件吗?

我尝试过的几种方法:

file = "736_2_PerformanceCurve_(23_0C)_(13_5V).dat"
datContent = [i.strip().split() for i in open(file, encoding='latin1').readlines()]
datContent
Run Code Online (Sandbox Code Playgroud)

这给出了输出

[['|CF,2,1,1;|CK,1,3,1,1;'],
 ['|NO,1,7,1,0,,0,;'],
 ['|NL,1,10,1252,0x407;'],
 ['|CT,1,41,0,6,Bench#,24,Korrosionstest', '15A046-01,0,;'],
 ['|CT,1,30,0,11,StartOfTest,8,06/30/17,0,;'],
 ['|CT,1,58,0,10,ResultPath,36,c:\\korrosionstest\\daten\\#170161-OR02,0,;'],
 ['|CT,1,59,0,11,GraphicPath,36,c:\\korrosionstest\\daten\\#170161-OR02,0,;'],
 ['|CT,1,31,0,15,GraphicBaseName,5,736_2,0,;'],
 ['|CT,1,26,0,10,PartNumber,5,736_2,0,;'],
 ['|CT,1,31,0,9,VA-Nr.', 'GS,11,170161-OR02,0,;'],
 ['|CT,1,62,0,9,VA-Nr.',
  'CC,42,TO_ENV_2017_G2_C1_Platform_CC-122164-03-08,0,;'],
 ['|CT,1,24,0,6,Tester,8,Behrendt,0,;'],
 ['|CT,1,32,0,15,Test', 'Department,6,GS/ETR,0,;'],
 ['|CG,1,5,1,1,1;'],
 ['|CD,1,16,1E-2,1,1,s,0,0,0;'],
 ['|NT,1,27,30,', '6,2017,14,25,15.8050001;'],
 ['|CC,1,3,1,1;'],
 ['|CP,1,16,1,2,4,16,0,0,1,0;'],
 ['|Cb,1,33,1,0,1,1,0,11718,0,11718,1,5E-3,0,;'],
 ['|CR,1,30,1,6.103888176768602E-3,0,1,1,A;'],
 ['|CN,1,28,0,0,0,16,ai_iB1_Strom_ECU,0,;'],
 ['|CG,1,5,1,1,1;'],
 ['|CD,1,16,1E-2,1,1,s,0,0,0;'],
 ['|NT,1,27,30,', '6,2017,14,25,15.8050001;'],
 ['|CC,1,3,1,1;'],
 ['|CP,1,16,2,2,4,16,0,0,1,0;'],
 ['|Cb,1,37,1,0,2,1,11718,11718,0,11718,1,5E-3,0,;'],
 ['|CR,1,30,1,3.662332906061161E-3,0,1,1,V;'],
 ['|CN,1,31,0,0,0,19,ai_iB1_Spannung_UBB,0,;'],
Run Code Online (Sandbox Code Playgroud)

对应的csv文件

[![在此处输入图像描述][1]][1]

编辑 :

from asammdf import MDF
dat_file = r"C:\Users\HPO2KOR\Desktop\Work\data1.dat"
mdf_file = r"C:\Users\HPO2KOR\Desktop\Work\data1.mdf"
df = mdf.to_dataframe()
mdf = MDF(mdf_file)
df.head()
Run Code Online (Sandbox Code Playgroud)

这给了我 [![在此处输入图像描述][2]][2]

如何从 dat 文件中读取相同的数据,是否有相同的库或代码?

Boe*_*dal 4

如果我查看该文件,它看起来像是一种特定的格式。

一个数据块以a开始|并以a结束;。在数据块中,数据被分割,。基本上它就像 CSV,但换行符是;.

现在,借助正则表达式,您可以像这样读取这些数据:

import re

with open("resources/input.dat") as f:
    lines = f.readlines()
    text = "".join(lines)

regex = r"\|(.*?);"
matches = re.finditer(regex, text, re.MULTILINE | re.DOTALL)


data = []

for matchNum, match in enumerate(matches, start=1):
    for group in match.groups():
        data.append(group.split(","))

for d in data:
    print(d)
Run Code Online (Sandbox Code Playgroud)

输入

|CF,2,1,1;|CK,1,3,1,1;
|NO,1,7,1,0,,0,;
|CT,1,41,0,6,Bench,24,Korrosionstest', '15A046-01,0,
otherline_data;
Run Code Online (Sandbox Code Playgroud)

输出

['CF', '2', '1', '1']
['CK', '1', '3', '1', '1']
['NO', '1', '7', '1', '0', '', '0', '']
['CT', '1', '41', '0', '6', 'Bench', '24', "Korrosionstest'", " '15A046-01", '0', '\notherline_data']
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,即使数据块不以新行结束,您仍然可以获得数据,直到定义的结束标记;

编辑

我下载了你的 .dat 文件。正如你所看到的,在第 1133 行之后有一些奇怪的字符,根本没有意义。这些字符或更确切地说字节可能是您在开始时处理数据所需的信息。基本上它看起来像是一些压缩数据,其中包含我在评论中告诉您的所需背景信息。

FAMOS 具有解释该字节字符串的知识,因此可以按预期向您提供数据。这该如何解释呢?询问从哪里获取数据或在 FAMOS 代码中找到它。

我认为这里没有人可以回答你这个问题。我不知道怎么办。这太具体了,因此最好去哪里获取数据。

.dat 文件中的片段:(总共 32404 行,只有 1133 行有数据) 在此输入图像描述