gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:12 24 4
gpt4 key购买 nike

我在编程方面很新,但现在我需要它到一个项目中,所以我在“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com