我是编程方面的新手,但现在我需要一个项目,所以我在“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)
答案 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.