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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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,但我在迷你熊猫库中迷路了。

答案

IMO你不需要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']]

如果你想从这个数据中获得一个pandas数据帧:

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]+)
  • 使用|连接有两个简单的模式(要么): 左边的那个([d]+.[d]{5,})检查你想要的浮点数,浮点数的边界是5+, 右边的那个(R[0-9]+)有一个左侧的R边界。
  • 您可以根据需要简单地更改这些边界,并使用$ 1调用捕获的输出并执行编码。
  • 你可以逃避语言特定的元素,如。如果需要,使用。

enter image description here

以上是关于从python中的几个结构相同的文本文件块中解析数据的主要内容,如果未能解决你的问题,请参考以下文章

python读取文件的几种方式

python读取文件的几种方式

遍历目录结构并在 Python 中解析文本文件

对具有相同结构的几个数据集使用lapply并可能进行for循环以提取和计算每个数据帧的值

从固定大小的字节缓冲区的连续块中解析 protobuf 消息序列

在Python使用yaml的几个例子