![](/img/trans.png)
[英]Reading a configuration file in Python (storing/reading nested data with ConfigParser)
[英]reading file and storing data in python
我有在以下格式数据的文本文件:
*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)
并将元素类型和其他存储在变量中。
谢谢。
*请参阅元素信息中的中断。
您可以使用正则表达式执行此操作。
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')
您可能想使用open()将文件作为字符串读入python。 然后,您可以解析字符串以获取所需的信息,并将其存储在适当的变量中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.