猿问

针对巨大的串联文件优化脚本/循环以丢弃文件列表中的有缺陷的项目

用一个真实的例子替换了例子文件;用代替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文件; 奇数文件是正确的;甚至文件-错误。


呼啦一阵风
浏览 126回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答