如何解决python:浮点数格式
我正在编写 python 脚本,该脚本将一个点的坐标(表示 3D 结构的几何中心)保存在多模型文件 (result.pdb) 中,该文件包含 240 个相同原子的模型,其中 240 个不同的坐标 (XYZ) 分开由 ENDMDL 术语。这是我的python脚本的一个片段:
# this function calculates XYZ of the given atomic coordinates
def lig_center(nested_array_list):
a = numpy.array(nested_array_list)
mean = numpy.mean(a,axis=0)
return mean[0],mean[1],mean[2] # x,y,z
# make the list of the centres for each of the conformation
conf_xyz=[]
i=1
# loop each of the 240 conformations
for conf in d.ch.conformations:
number=i
# get XYZ of all atoms of each conformations
xyz=conf.getCoords()
# get XYZ of the geometrical center of these coordinates
col=lig_center(xyz)
# store geometrical center as in a list
col1 = list(col)
# append it to the existing list called conf_xyz
conf_xyz.append(col1)
# store coordinates of the centers in the output pdb file:
with open(outputfilename+".pdb","a") as f:
# for each of the model first print its index
print >>f,'MODEL'+str(i)
# then print the name of the atom (always C and its XYZ taken from the list col:
print >>f,'ATOM 1 C COM 1 '+'%.2f %.2f %.2f' %(col[0],col[1],col[2])+' 1.00 0.00'
print >>f,'ENDMDL'
i=i+1
这个方法在输出格式上的问题。这是我在 result.pdb 输出文件中的内容:
MODEL79
ATOM 1 C COM 1 22.06 -14.69 6.02 1.00 0.00
ENDMDL
MODEL80
ATOM 1 C COM 1 20.01 -17.91 4.69 1.00 0.00
ENDMDL
MODEL81
ATOM 1 C COM 1 04.38 -9.05 -7.02 1.00 0.00
ENDMDL
MODEL82
ATOM 1 C COM 1 3.12 -3.63 -9.41 1.00 0.00
ENDMDL
MODEL83
ATOM 1 C COM 1 4.13 -6.49 -7.51 1.00 0.00
ENDMDL
MODEL84
ATOM 1 C COM 1 3.22 -3.67 -9.70 1.00 0.00
ENDMDL
MODEL85
ATOM 1 C COM 1 4.22 -4.74 -8.54 1.00 0.00
ENDMDL
MODEL86
ATOM 1 C COM 1 1.70 -2.19 -12.49 1.00 0.00
ENDMDL
MODEL87
ATOM 1 C COM 1 3.32 -3.98 -10.74 1.00 0.00
ENDMDL
这是我应该拥有的:
MODEL79
ATOM 1 C COM 1 22.06 -14.69 06.02 1.00 0.00
ENDMDL
MODEL80
ATOM 1 C COM 1 20.01 -17.91 04.69 1.00 0.00
ENDMDL
MODEL81
ATOM 1 C COM 1 04.38 -09.05 -07.02 1.00 0.00
ENDMDL
MODEL82
ATOM 1 C COM 1 03.12 -03.63 -09.41 1.00 0.00
ENDMDL
MODEL83
ATOM 1 C COM 1 04.13 -06.49 -07.51 1.00 0.00
ENDMDL
MODEL84
ATOM 1 C COM 1 03.22 -03.67 -09.70 1.00 0.00
ENDMDL
MODEL85
ATOM 1 C COM 1 04.22 -04.74 -08.54 1.00 0.00
ENDMDL
MODEL86
ATOM 1 C COM 1 01.70 -02.19 -12.49 1.00 0.00
ENDMDL
MODEL87
ATOM 1 C COM 1 03.32 -03.98 -10.74 1.00 0.00
注意在第二种情况下,由于每个值的 xx.xx 格式,XYZ (6-8) 列完美对齐(我在 x.xx 中添加了零,例如将 4.22 -4.74 -8.54 转换为 04.22 - 04.74 -08.54 等)。
假设在我的python脚本末尾定义了输出文件的格式,通过
print >>f,col[2])+' 1.00 0.00'
解决方案之一是将其替换为
print >>f,'ATOM 1 C COM 1 '+'%05.2f %05.2f %05.2f' %(col_B[0],col_B[1],col_B[2])+' 1.00 0.00'
它对正数做正确的工作,但对负数没有做任何事情:
MODEL7
ATOM 1 C COM 1 06.09 -19.59 -0.90 1.00 0.00
ENDMDL
MODEL8
ATOM 1 C COM 1 06.51 -19.86 -1.27 1.00 0.00
ENDMDL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。