Python 如何在文本中的特定行后添加单词?
我试图在文件中的某一行后添加一个单词。我正在使用内嵌和引用,并试图创建outfile。填充和引用的类型相同,但引用在特定位置包含TER单词。我想将terword添加到outfile中(基本上创建一个infle副本,并从引用中添加terword)。 我试图按一个数字(代码中的resnum)进行搜索,但会出现问题,因为许多连续行都有相同的数字。 有人能帮忙吗Python 如何在文本中的特定行后添加单词?,python,Python,我试图在文件中的某一行后添加一个单词。我正在使用内嵌和引用,并试图创建outfile。填充和引用的类型相同,但引用在特定位置包含TER单词。我想将terword添加到outfile中(基本上创建一个infle副本,并从引用中添加terword)。 我试图按一个数字(代码中的resnum)进行搜索,但会出现问题,因为许多连续行都有相同的数字。 有人能帮忙吗 from sys import argv import argparse script,infile,outfile, reference
from sys import argv
import argparse
script,infile,outfile, reference = argv
Ter = []
res = []
def get_Ter(reference):
reference_1 = open(reference,"r")
for line in reference_1:
contents = line.split(" ")
if contents[0] == "TER":
resnum = line[22:27]
resname = line[17:20]
chain = line[21]
Ter.append(resnum)
def find_TER(infile,outfile):
with open(infile, "r") as infile_1:
content = infile_1.readlines()
with open(outfile, "w+") as outfile_1:
outfile_1.write(content)
if line[0:6] == "ATOM ":
resnum_1 = line[22:27]
res.append(resnum_1)
if resnum_1 in res == resnum in Ter:
outfile_1.write(line + "\nTER")
find_TER(infile,outfile)
get_Ter(reference)
文件示例(这是参考,填充相同,但缺少填充)。它们都很好地排列在一起(此处的格式):原子992 SG CYX D 452 23.296 45.745 28.572 1.00 0.00
原子993 C CYX D 452 20.742 42.431 27.841 1.00 0.00
原子994 O CYX D 452 20.689 41.447 28.565 1.00 0.00
原子995-OXT-CYX D 452 19.788 42.822 27.185 1.00 0.00
TER 995 CYS D 452
996 N ARG D 492 27.510 26.357 34.041 1.00 0.00原子
原子997 H1 ARG D 492 26.590 26.591 33.694 1.00 0.00
原子998 H2 ARG D 492 28.138 27.135 34.182 1.00 0.00
原子999 H3 ARG D 492 27.422 26.030 34.993 1.00 0.00
原子1000 CA ARG D 492 28.179 25.410 33.192 1.00 0.00 现在我有这个:
from sys import argv
import argparse
script,infile,outfile, reference = argv
Ter = []
res = []
def get_Ter(reference):
reference_1 = open(reference,"r")
for line in reference_1:
contents = line.split(" ")
if contents[0] == "TER":
ternum = line[22:27]
def find_TER(infile,outfile):
with open(infile, "r") as infile_1:
content = infile_1.readlines()
with open(outfile, "w+") as outfile_1:
for line in content:
outfile_1.write(line)
line = line.split(" ")
if line[0] == "ATOM":
resnum = line[22:27]
if ternum == resnum:
find_TER(infile,outfile)
get_Ter(reference)
基本逻辑有两个方面:
contents = line.split():
resnum = line[22:27]
if ternum > 0 and ternum != int(resnum):
# write out the TER line
ternum = -1
# continue with rest of the program.
if contents[0] == "TER":
...
您可能还需要在文件末尾进行检查,以防最后一个resnum有一行要打印
这足以让你前进吗?不。我确实尝试了不同的代码(相关),并在周末前询问。这是生物信息学中的一种常见格式。修复不起作用,因为你没有把逻辑的其余部分放进去,而你把它放错了地方。此外,您的文件处理逻辑不正确;你应该在程序开始时打开一次文件,而不是每次你点击一个TER参考。对于整体问题,你真的需要坐下来和你旁边的人一起,在程序流程中获得一些指导帮助;这超出了堆栈溢出的范围。为你重写这篇文章也是一个非常复杂的问题,我建议你在找到某个人之前使用一种策略:尝试增量编程。只需编写几行代码,并确保它们在继续下一步之前工作正常。例如。首先打开infile并将其写入outfile,一次一行。然后添加解释输入行的代码(将其拆分为所需的字段)。第三,打开参考文件并读取它,使其与infle保持同步。下一步,在infle中识别三行并找到匹配的行——找到一行就打印一条消息。看到了吗,一点一点的?谢谢,我会试试的。对不起,我已经有一段时间了,我的脑子都快炸了。我应该把这个放在哪里?我只是刚刚开始编写代码,所以我没有真正理解你所说的;我在TER处理过程中得到了这个。正如新版本所显示的,这是在你将输入行拆分为内容之后进行的。谢谢,但对我来说还是有点太难了。它只是让人困惑:(ternum来自哪里?ternum是与TER行关联的resnum,正如您添加的。现在将TER行保存在一个变量中,然后插入我答案中的代码。