Python:将以特定行为边界的 block 复制到新文件

标签 python string file python-2.7 copy

我在编程方面很新,但现在我需要它到一个项目中,所以我在“sos”中学习了一些 python 类(class)。首先:对不起我的英语,但我希望你能理解我。

所以我的任务之一是我有很多文件,其中包含以下内容:一个蛋白质(大约前 56 行)和几个这样开头的 block :“HEADER crosscluster.^^^.^^^.pdb “ 我必须选择 .pdb 前面的“^^^”大于 016 的那些(我想我可以做这部分)。然后我必须将蛋白质和这些选定的 block 之一复制到一个新文件中,对每个选定的 block 执行此操作。所以一个文件应该只包含蛋白质,1 个 block 以“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)

最佳答案

如果您的代码没有收到任何错误,则意味着函数 - 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.

关于Python:将以特定行为边界的 block 复制到新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32189884/

相关文章:

c - 将文本文件中的十进制数存储到 C 中的数组中

python - 如何使用 Flask 处理 GET Query String

python - 显示更多有效数字的系数

string - 严格将字符串转换为 int

javascript - 为什么这段 JavaScript 代码在 Firefox 中无效?

php - 如何在不更改扩展名的情况下更改上传文件的名称

c# - 如何覆盖 UWP 中的文件?

python - 如何交换日期时间对象中的月份和日期?

python - 仅锁定 Python 中的一部分威胁

c - 使用#defines 自动替换变量