为了账号安全,请及时绑定邮箱和手机立即绑定

解析文本文件中的数据

解析文本文件中的数据

翻阅古今 2021-03-29 14:38:17
我有一个文本文件,其内容如下:******** ENTRY 01 ********ID:                  01Data1:               0.1834869385E-002Data2:              10.9598489301Data3:              -0.1091356549E+001Data4:                715然后是一个空行,并重复更多类似的块,所有块都具有相同的数据字段。我正在向Python移植C ++代码,并且某个部分逐行获取文件,检测文本标题,然后检测每个字段文本以提取数据。这看起来根本不是一个智能代码,而且我认为Python必须具有一些库才能轻松解析此类数据。毕竟,它几乎看起来像CSV!有什么想法吗?
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

my_file:


******** ENTRY 01 ********

ID:                  01

Data1:               0.1834869385E-002

Data2:              10.9598489301

Data3:              -0.1091356549E+001

Data4:                715


ID:                  02

Data1:               0.18348674325E-012

Data2:              10.9598489301

Data3:              0.0

Data4:                5748


ID:                  03

Data1:               20.1834869385E-002

Data2:              10.954576354

Data3:              10.13476858762435E+001

Data4:                7456

Python脚本:


import re


with open('my_file', 'r') as f:

    data  = list()

    group = dict()

    for key, value in re.findall(r'(.*):\s*([\dE+-.]+)', f.read()):

        if key in group:

            data.append(group)

            group = dict()

        group[key] = value

    data.append(group)


print data

打印输出:


[

    {

        'Data4': '715',

        'Data1': '0.1834869385E-002',

        'ID': '01',

        'Data3': '-0.1091356549E+001',

        'Data2': '10.9598489301'

    },

    {

        'Data4': '5748',

        'Data1': '0.18348674325E-012',

        'ID': '02',

        'Data3': '0.0',

        'Data2': '10.9598489301'

    },

    {

        'Data4': '7456',

        'Data1': '20.1834869385E-002',

        'ID': '03',

        'Data3': '10.13476858762435E+001',

        'Data2': '10.954576354'

    }

]


查看完整回答
反对 回复 2021-04-01
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

一个非常简单的方法可能是


all_objects = []


with open("datafile") as f:

    for L in f:

        if L[:3] == "***":

            # Line starts with asterisks, create a new object

            all_objects.append({})

        elif ":" in L:

            # Line is a key/value field, update current object

            k, v = map(str.strip, L.split(":", 1))

            all_objects[-1][k] = v


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号