在python中解析文本文件中几个结构相同的块中的数据

2024-05-29 05:33:37 发布

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

我有一个文本文件,里面有几个这样的文本块:

Module Resistor_SMD:R_0402_1005Metric (layer B.Cu) (tedit 5B301BBD) (tstamp 5CC0A687)
    (at 120.316179 97.92138 90)
    (descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator")
    (tags resistor)
    (path /610532D4)
    (attr smd)
    (fp_text reference R59 (at 0 1.17 90) (layer B.SilkS)

我想拿出以下内容: 120.316179, 97.92138 90 and R59

把它放在某个地方。。。你知道吗

然后,我想收集行项目,并根据前两个数字的值丢弃一些…它们是XY坐标。你知道吗

然后,把它写进一个列表。你知道吗

我怎样才能用正则表达式做到这一点? 我正在加载该文件并尝试跟随here,但是我在添加pandas库时迷失了方向。你知道吗


Tags: 文本layermetricatmodule文本文件squaredescr
2条回答

在我看来,这个任务不需要re。您可以遍历文件的行,并根据'(at ''fp_text reference'等信号字符串,填写所有电阻器数据的列表,例如:

with open('textfile.txt') as f:
    data = []
    row = []
    for line in f:
        if row:
            if '(fp_text ref' in line.strip():
                row.append(line.strip().split()[2])
                data.append(row)
                row = []
        else:
            if '(at ' in line.strip():
                row = line.strip()[:-1].split()[1:4]

print(data)

# [['120.316179', '97.92138', '90', 'R59']]

如果你想从这些数据中得到一个数据帧:

import pandas as pd 
df = pd.DataFrame(data, columns=['x', 'y', 'z', 'R'])
print(df)

#             x         y   z    R                            
# 0  120.316179  97.92138  90  R59

This RegEx可能有助于捕获所需的三个字符串:

([\d]+\.[\d]{5,}|R[0-9]+)
  • 使用|(OR)连接两个简单模式:

    • 左边的([\d]+\.[\d]{5,})用5+边界检查所需的浮点数,然后
    • 右边的(R[0-9]+)有一个左边的R边界。你知道吗
  • 您可以随意更改这些边界,使用$1调用捕获的输出并进行编码。

  • 如果需要,可以使用\转义特定于语言的元音,例如。你知道吗

enter image description here

相关问题 更多 >

    热门问题