Python:将特定行边界的块复制到新文件中

时间:2015-08-24 19:08:24

标签: python string file python-2.7 copy

我是编程方面的新手,但现在我需要一个项目,所以我在“sos”中做了一些python课程。首先:抱歉我的英语,但我希望你能理解我。

所以我的任务之一是我有很多文件包含以下内容:一个蛋白质(大约前56行),以及几个以这样开头的块:“HEADER crosscluster。^^^。^^^。pdb “ 我必须选择.pdb前面的“^^^”大于016的那些(我想我可以做这部分)。然后我必须将蛋白质和这些选择的块之一复制到一个新文件中,为每个选择的块执行此操作。因此,一个文件应仅包含蛋白质,1个块以“HEADER crosscluster。 .pdb”开头。

我没有收到任何错误消息,只是没有发生任何事情。

所以...脚本(:$):

    #!/usr/bin/python

import os
import sys
import re



def split_file(phrase1, phrase2, my_file):
    n = 1
    my_list = []
    for phrase1, phrase2 in my_file.readlines():
        if not re.search(r"(.*)(.pdb)", line):
            my_list.append(line)
            with open("output"+str(n)+".pdb","w") as out_file:
                for item in my_list:
                    out_file.write(item)
        else:
            if my_list:
                my_list = []
                n += 1
        my_file.close()
        out_file.close()       


for dirname, dirnames, filenames in os.walk("/home/georgina/FTmaperedmenyek"):
    for filename in filenames:
        full_name = str(os.path.join(dirname, filename)) 
        if filename.endswith(".pdb"):
            searching = open(full_name, "r")
            for line in searching:
                pld = "HEADER crosscluster.***.***.pdb"
                protein = "HEADER protein"
                if pld in line and int(pld[24:27]) > int(016):
                    split_file(protein, pld, searching)

1 个答案:

答案 0 :(得分:1)

如果您的代码没有收到任何错误,则表示函数 - split_file() - 根本没有被调用,这是因为 -

int(016)

如果在Python 2.x中为数字前缀0,则将其定义为八进制数。示例 -

>>> int(016)
14

14是八进制数0o16的十进制表示。

你需要做 -

int(pld[24:27]) > int(16)

其次,我认为这不会起作用 - for phrase1, phrase2 in my_file.readlines(): - 如果有多于或少于2行,这会抛出错误。

在迭代函数内部时,不建议使用.readline()。为什么?查看此问题 - Python:Why readline() function doesn't work for file looping

您应该再次遍历该文件,而不是使用.readlines()。你应该这样做 -

for line in my_file:
    #If you wanted to check if phrase1 and phrase2 are in the line do the below -
    if phrase1 in line and phrase2 in line:
        #rest of the logic.