【问题标题】:Reading .dat file in python在python中读取.dat文件
【发布时间】:2020-05-04 01:29:20
【问题描述】:

我有一个 .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

给出输出

[['|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,;'],

相同的对应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()

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

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

【问题讨论】:

  • 我不确定 DAT 文件背后的数据是什么,但看看你能不能找到它? lifewire.com/what-is-a-dat-file-2620550 。这样您可能会更好地了解如何打开文件
  • 你能分享示例 dat 文件吗?
  • “.dat”文件很可能来自 iMC Famos imcdataworks.com/products/measurement-software/imc-famos 。我不认为那些打开的文件有解析器。
  • 是的 iMC famos 能够成功读取这个 dat 文件但它没有创建它,实际上它是由其他系统创建的
  • 或者你知道他们是否有相同的 API 吗?

标签: python regex file-handling mdf


【解决方案1】:

如果我查看文件,我会发现它像是一种特定格式。

一个数据块以| 开头,以; 结尾。在数据块中,数据用, 分割。基本上它就像一个 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)

输入

|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;

输出

['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']

如您所见,即使数据块没有在新行结束,您仍然可以获取数据,直到定义的结束标记;

编辑

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

FAMOS 具有解释该字节字符串的知识,因此可以按预期向您呈现数据。如何解释这个?询问您从何处获取数据或在 FAMOS 代码中找到数据的来源。

我认为这里没有人能回答你这个问题。我不知道怎么做。这太具体了,因此最好去获取数据的地方。

.dat 文件中的 sn-p:(总共 32404 行,只有 1133 行有数据)

【讨论】:

  • 这是我得到的整个 .dat 文件 '\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03
  • 前几行已成功解析,但在下面我得到了这个
  • 是十六进制的控制字符。如果你看这里:donsnotes.com/tech/charsets/ascii.html 你就会明白这意味着什么。基本上你有一个文本字符的结尾,一个重复的空字符。我不知道你想从这块数据中提取什么信息。但这可能是一些垃圾?
  • 但是famos 软件可以从任何dat 文件中提取数据,即使它不知道数据是如何创建的。开发人员是怎么做到的,你知道如果用户在 dat 文件中定义数据格式怎么可能
  • @PulkitBhatnagar 它可能是您所在领域的标准。正如我所见,FAMOS 是用于测量和东西的。也许这是广泛用于此类软件的标准。但我不知道它是否公开可用。
【解决方案2】:

您可以使用以下代码:

infile = open('.input.dat', 'r')
for line in infile:
    # Typical line: variable = value
    variable, value = line.split('=')
    variable = variable.strip()  # remove leading/traling blanks
infile.close()

这里有更多信息:file reading

【讨论】:

  • UnpicklingError: invalid load key, '|'.
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
相关资源
最近更新 更多