繁体   English   中英

读取文件并将数据存储在python中

[英]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)

这个正则表达式将捕获两个组,我们将利用它们来构建您的nodeelement元组。

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(",")])

我们利用每个捕获组来构建nodeselements的列表。 这是通过以下两行完成的:

[x.strip() for x in matches.group(1).split(",")]
[x.strip() for x in matches.group(2).split(",")]

我们将捕获的字符串分割为逗号( , ),然后从每个元素中去除空格。 在以上各行的结尾,我们列出了两组列表。 第一个( group(1) )包含nodes 第二个( group(2) )包含elements

最后,由于要求这些是元组,因此我们通过包装列表理解将列表转换为元组。 旁注:您可能实际上并不需要将它们作为元组,但列表的效果也可以很好,具体取决于应用程序其余部分的工作和期望。


运行上面的代码后, nodeselements包含这些值。

('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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM