Python:将以特定行为边界的块复制到新的fi

2024-06-07 04:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程非常陌生,但现在我需要它来完成一个项目,所以我在“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)

Tags: 文件inimportforifosmyline
1条回答
网友
1楼 · 发布于 2024-06-07 04:48:53

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

int(016)

在Python2.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.

相关问题 更多 >