- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想读取一些 .sdf 文件(实际上是 .mdl 文件,但当我下载它们时它们显示为 .sdf),以便制作一个程序将它们更改为另一种格式。 .sdf 文件模拟分子,但这与那里无关。
我想阅读忘记债券的坐标,所以我需要从这样的文件格式:
ALA
CCTOOLS-0424210918
13 12 0 0 1 0 0 0 0 0999 V2000
2.2810 26.2130 12.8040 N 0 0 0 0 0
1.1690 26.9420 13.4110 C 0 0 0 0 0
1.5390 28.3440 13.8740 C 0 0 0 0 0
2.7090 28.6470 14.1140 O 0 0 0 0 0
0.6010 26.1430 14.5740 C 0 0 0 0 0
0.5230 29.1940 13.9970 O 0 0 0 0 0
2.0330 25.2730 12.4930 H 0 0 0 0 0
3.0800 26.1840 13.4360 H 0 0 0 0 0
0.3990 27.0670 12.6130 H 0 0 0 0 0
-0.2470 26.6990 15.0370 H 0 0 0 0 0
0.3080 25.1100 14.2700 H 0 0 0 0 0
1.3840 25.8760 15.3210 H 0 0 0 0 0
0.7530 30.0690 14.2860 H 0 0 0 0 0
1 2 1 0 0 0
1 7 1 0 0 0
1 8 1 0 0 0
2 3 1 0 0 0
2 5 1 0 0 0
2 9 1 0 0 0
3 4 2 0 0 0
3 6 1 0 0 0
5 10 1 0 0 0
5 11 1 0 0 0
5 12 1 0 0 0
6 13 1 0 0 0
M END
$$$$
我想从第 3 行开始阅读,直到数字前只有 2 个空格。
file=open('ALA_model.sdf',mode="r")
string_list=file.readlines()
file.close()
datasplit=[]
for i in range(len(string_list)):
datasplit.append(string_list[i].split(" "))
(快速提醒:ALA_model.sdf 是上面文件的名称,但不是我必须处理的唯一文件。请随意使用上面的 ALA 文件,因为我是从
http://ligand-expo.rcsb.org/reports/A/ALA/ALA_model.sdf 下载的)
datasplit[3]=['', '13', '12', '', '0', '', '0', '', '1', '', '0', '', '0', '', '0', '', '0', '', '0999', 'V2000\n']
这将意味着开始阅读。然后我们有:
datasplit[4]=['', '', '', '', '2.2810', '', '', '26.2130', '', '', '12.8040', 'N', '', '', '0', '', '0', '', '0', '', '0', '', '0\n']
我只需要前三个数字和字母/原子,但我可以自己处理。
datasplit[17]=['', '', '1', '', '2', '', '1', '', '0', '', '0', '', '0\n']
是我不想读的第一行。
最佳答案
另一种选择可能是使用 file.read()
读取整个文件。 , 并重复匹配以 3 个或更多空格开头的所有行,后跟可选的 -
和使用模式的数字。
^ {3,}-?\d.*(?:\r?\n {3,}-?\d.*)*
^
字符串开头 {3,}-?\d.*
匹配 3 个或更多空格,可选 -
, 一个数字和该行的其余部分 (?:\r?\n {3,}-?\d.*)*
(可选)再次重复换行符和相同的模式 splitlines()
和
split()
每行,将前 4 项附加到
datasplit
.
import re
from pprint import pprint
file = open('ALA_model.sdf', mode="r")
content = file.read()
file.close()
match = re.search(r"^ {3,}-?\d.*(?:\r?\n {3,}-?\d.*)*", content, re.M)
datasplit = []
if match:
for line in match.group().splitlines():
datasplit.append([part for part in line.split()][:4])
pprint(datasplit)
输出
[['2.2810', '26.2130', '12.8040', 'N'],
['1.1690', '26.9420', '13.4110', 'C'],
['1.5390', '28.3440', '13.8740', 'C'],
['2.7090', '28.6470', '14.1140', 'O'],
['0.6010', '26.1430', '14.5740', 'C'],
['0.5230', '29.1940', '13.9970', 'O'],
['2.0330', '25.2730', '12.4930', 'H'],
['3.0800', '26.1840', '13.4360', 'H'],
['0.3990', '27.0670', '12.6130', 'H'],
['-0.2470', '26.6990', '15.0370', 'H'],
['0.3080', '25.1100', '14.2700', 'H'],
['1.3840', '25.8760', '15.3210', 'H'],
['0.7530', '30.0690', '14.2860', 'H']]
Python demo
关于Python读取sdf/mdl坐标: How to read until two spaces are met?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67320397/
我系统上的docker info命令输出如下: # docker info Containers: 0 Images: 0 Storage Driver: devicemapper ..... D
我如何捕获用户按下 ctrl + space + space? 我用这段代码成功测试了ctrl + space: RegisterHotKey(0, 1, MOD_CONTROL, VK_SPACE)
我有一个 Matlab 图,我想在论文中使用。此图包含多个 cdfplots。现在的问题是我不能使用标记,因为在情节中变得非常密集。如果我想让样本稀疏,我必须从 cdfplot 中删除一些样本,这将导
我正在尝试获取我将用于备份的服务器上所有数据库的列表。以下是我尝试打印数据库列表但出现错误的代码片段。如何解决?添加双方括号并不能解决问题。 我已经研究了一些类似的问题,但我无法弄清楚。 grep:字
我了解 new gen/old gen/perm gen 之间的区别,但我不知道“To Space”和“From Space”是什么。我看到我的“From Space”使用率达到 99.8%,而“To
我当前有一个返回时看起来像这样的字符串: //This is the url string // the-great-debate---toilet-paper-over-or-under-the-r
我太亲密了。我正在尝试编写用于Notepad++的正则表达式表达式,以用空格替换破折号,而忽略已经用前置/后置空格代替的破折号。我知道我可以用“foobarfoo”搜索/替换“-”,然后搜索“-”替换
我的 ANTLR 代码如下: LPARENTHESIS : ('('); RPARENTHESIS : (')'); fragment CHARACTER : ('a'..'z'|'0'..'9'|)
在过去的 6 个小时里,我一直在尝试在我的 webgl 应用程序中实现点击,但我找不到任何关于这个主题的足够清晰的内容。 到目前为止,我想出的是伪代码: screenSpace = mousePosi
如何使用正则表达式来测试空格或制表符,但不测试换行符? 我尝试了 \s,但我发现它也测试换行符。 我使用C# (.NET) 和 WPF ,但这应该不重要。 最佳答案 使用字符类:[\t] 关于rege
我想解析以下内容: name:name 名称以字母开头和结尾,并且可以包含字母和空格的任意组合。它们也可以是空白的。我的规则是: identifier = alnum (space* alnum)*;
有什么办法可以让 Eden 空间按比例大于 Tenured 空间吗?有 NewRatio 但它以相反的方式工作(Tenured 比 Eden 大几倍)。 我知道有 -XX:NewSize= 和 -XX
我正在编写一个程序,让人们输入他们的信息(姓名,年龄......)。对于姓名输入,我不希望他们留空,只允许字母和空格,但不能以空格开头。合适的正则表达式是什么?我尝试使用: ^[a-zA-Z\\s]*
好的,我正在制作一个程序,它也可以制作垂直线、水平线和对角线!我对我的一个没有任何意义的输出感到困惑。 所以我的伪代码是这样的: //enter a char //enter a number
当我使用 scp 从服务器复制文件时, 我错误地使用了命令 scp xxx@xxxx:xx.zip . 当我完成后,我发现该文件的名称是 .我无法解压 这是目录列表。 http://pfil
我需要一个 bat 文件来获取 Windows 系统中 C:\驱动器的总空间和可用空间(以 GB(千兆字节)为单位),并创建一个包含详细信息的文本文件。 注意:我不想使用任何外部实用程序。 最佳答案
作为预处理我的数据的一部分。我希望能够替换空格后跟数字,同时保留空格后跟一个字符。例如: Input String: '8.1.7 Sep 2000 Dec 2004 Dec 2006 Indefin
我正在编写一个 XPath 表达式,但我修复了一个奇怪的错误,但是以下两个 XPath 表达式之间有什么区别? "//td[starts-with(normalize-space()),'Posted
在 C 中,当读取文本文件时,是否有可能接受一个未知大小的整数值(假设它适合 int),因为它在数字之前和数字之后都有一个空格。例如。 363 865我想分别存储 363 和 865,因为它们有自己的
在 sys/ptrace.h 中,我看到类似这样的内容: @define PT_READ_I 1 /* read world in child's I space*/ @define PT_READ
我是一名优秀的程序员,十分优秀!