所以,我有一个文件是这样的:
# 3e98.mtz MR_AUTO with model 200la_.pdb
SPACegroup HALL P 2yb #P 1 21 1
SOLU SET RFZ=3.0 TFZ=4.7 PAK=0 LLG=30
SOLU 6DIM ENSE 200la_ EULER 321.997 124.066 234.744 FRAC -0.14681 0.50245 -0.05722
SOLU SET RFZ=3.3 TFZ=4.2 PAK=0 LLG=30
SOLU 6DIM ENSE 200la_ EULER 329.492 34.325 209.775 FRAC 0.70297 0.00106 -0.24023
SOLU SET RFZ=3.6 TFZ=3.6 PAK=0 LLG=30
SOLU 6DIM ENSE 200la_ EULER 177.344 78.287 187.356 FRAC 0.04890 0.00090 -0.57497
迭代这个文件并只提取浮点数的最佳方法是什么?在
在这种情况下,最好的方案是只提取类似于“321.997”(病毒细胞结构坐标)的数字,并将它们添加到一个列表中。在我看到的每个文件中,每行有6个类似的数字。我已经用一种新的方法来计算那些已经写入的单元格的坐标。在
如果你以一种不鼓励回答者检查其结构的方式显示你的输入,并且你问诸如“我如何只提取浮点数”之类的问题,并在评论中隐藏有用的信息,比如“在我正在查看的每个文件中,每行都有6个类似的数字”,你会得到下意识的答案,准确地提供了你所要求的:一个“浮动”列表,在列表前面包括3个伪数字(1.0、21.0和1.0)。在
如果您以一种更合意的方式显示数据,例如:
人们有可能会注意到这种结构(EULER后跟三个数字,然后是FRAC,然后是三个数字)重复,然后说“Oho,他的文件中每行有六个数字”,然后回来时会给出一些更有用的建议,比如:
从头开始,告诉我们你的文件结构是什么。可能有一种更好的获取信息的方法,而不是将文件粉碎成一个字符串列表,然后尝试从中恢复。在
更新同时,这里有一个答案,它使用了在您的数据和注释中很明显的结构,如果结构中有变化,它将更易于调试:
^{pr2}$结果:
更新2根据您的示例文件,以下简单代码(未测试)应该可以满足您的需要:
注意:这只是一个巧合,你要找的是“所有的浮点数”(它忽略了
RFZ=3.0 TFZ=4.7
中的浮点数!)。你得到的是一个有结构的文件:两种类型的SOLU记录,你想要在solu6dim记录中出现在EULER之后的3个数字和FRAC之后的3个数字。你不需要所有这些数字的列表,必须再次将它们分成(3个欧拉数和3个压裂数)乘以N有一个办法。在
相关问题 更多 >
编程相关推荐