用一个真实的例子替换了例子文件;用代替nbratoms变量nbrbonds。
初学者的问题。
我想针对大型文件(100G +)优化以下脚本。我昨天发现了itertools的存在,但是没有任何线索。
f = open(sys.argv[1], "r")
out = open(sys.argv[2], 'w')
lines = f.read().split('\n@<TRIPOS>MOLECULE')
for i in lines:
ii=i.split('\n@<TRIPOS>',4)
header=ii[0]
infos=header.split('\n')[2]
nbrbonds=infos.split(' ')[2]
if str(nbrbonds) in ii[2]:
out.write('\n@<TRIPOS>MOLECULE'+str(i))
out.close()
f.close()
处理后的文件由串联的200,000+个单个MOL2文件组成(下面的最后一个示例)。该脚本的思想是首先将输入文件拆分为以两个定界的项目@<TRIPOS>MOLECULE(=新MOL2文件的第一行);然后根据起始行拆分这些项目@<TRIPOS>为4个部分(即,@<TRIPOS>MOLECULE,@<TRIPOS>ATOM,@<TRIPOS>BOND和@<TRIPOS>ALT_TYPE)。对于每个单个MOL2文件,我想检查14标题中(第二个)位置(每个单个MOL2文件中的不同)处的值
@<TRIPOS>MOLECULE
Z1198223644
14 14 0 0 0
USER_CHARGES
出现在单个文件的第3部分(以下)中:
@<TRIPOS>BOND
1 1 2 1
2 2 3 1
3 2 4 1
4 2 5 1
5 5 6 ar
6 5 11 ar
...
如果是这样->用\n@<TRIPOS>MOLECULE第一行将其打印到outputfile (本质上就是单个MOL2文件的外观)。它似乎可以正常工作,但是我担心它太业余了。另外,我不知道如何实现避免输出文件以这样的双头标记开头的步骤
@<TRIPOS>MOLECULE@<TRIPOS>MOLECULE
Z1198223644
...
任何帮助的欢迎!我加入了一个文件含有6个级联MOL2文件; 奇数文件是正确的;甚至文件-错误。
相关分类