我有一个文本文件,其中包含以下格式的数据:
*NODE
5100387, 54.799831647418, -4.147024550067, 22.466648807633
*ELEMENT,TYPE=C3D10M,ELSET=HEAD-R
5446424, 6192081, 5849509, 5849511, 6182919, 6820540, 5210471, 6611315,
6611314, 6459296, 6611316
我想读取此文件并将节点信息存储在元组元组中的节点元组和元素信息中。
node = (5100387, 54.799831647418, -4.147024550067, 22.466648807633)
element = (5446424, 6192081, 5849509, 5849511, 6182919, 6820540, 5210471, 6611315, 6611314, 6459296, 6611316)
并将元素类型和elset存储在变量中。
感谢。
*请注意元素信息有中断。
答案 0 :(得分:0)
您可以使用正则表达式执行此操作。
r"\*NODE\n(.+\n)\*ELEMENT.+\n(.+\n.+)"
要使用此正则表达式,您需要传递MULTILINE
标志。
regex = re.compile(r"\*NODE\n(.+\n)\*ELEMENT.+\n(.+\n.+)", re.MULTILINE)
此正则表达式将捕获两个组,我们用它们来构建您的node
和element
元组。
import re
regex = re.compile(r"\*NODE\n(.+\n)\*ELEMENT.+\n(.+\n.+)", re.MULTILINE)
record = """*NODE
5100387, 54.799831647418, -4.147024550067, 22.466648807633
*ELEMENT,TYPE=C3D10M,ELSET=HEAD-R
5446424, 6192081, 5849509, 5849511, 6182919, 6820540, 5210471, 6611315,
6611314, 6459296, 6611316"""
matches = re.match(regex, record)
nodes = tuple([x.strip() for x in matches.group(1).split(",")])
elements = tuple([x.strip() for x in matches.group(2).split(",")])
我们利用每个捕获组来构建nodes
和elements
的列表。这是通过以下两行完成的:
[x.strip() for x in matches.group(1).split(",")]
[x.strip() for x in matches.group(2).split(",")]
我们将捕获的字符串拆分为逗号(,
),然后从每个元素中删除空白区域。在上面的行的末尾,我们有两组列表。第一个(group(1)
)包含nodes
。第二个(group(2)
)包含elements
。
最后,由于要求这些是元组,我们通过包装列表理解将列表转换为元组。旁注:您可能实际上并不需要这些作为元组,列表也可以正常工作,具体取决于应用程序的其余部分所做的和期望的。
运行上述代码后,nodes
和elements
包含这些值。
('5100387', '54.799831647418', '-4.147024550067', '22.466648807633')
('5446424', '6192081', '5849509', '5849511', '6182919', '6820540', '5210471', '6611315', '6611314', '6459296', '6611316')
答案 1 :(得分:-1)
您可能希望使用open()将文件作为字符串读入python。然后,您可以解析字符串以获取所需信息,并将其存储在适当的变量中。