我正在使用蛋白质数据库中的文件,它看起来像这样。使用python比较文件中不同行的两个单词
SITE 2 AC1 15 ASN A 306 LEU A 309 ILE A 310 PHE A 313
SITE 3 AC1 15 ARG A 316 LEU A 326 ALA A 327 ILE A 345
SITE 4 AC1 15 CYS A 432 HIS A 435 HOH A 504
CRYST1 64.511 64.511 111.465 90.00 90.00 90.00 P 43 21 2 8
ORIGX1 1.000000 0.000000 0.000000 0.00000
ORIGX2 0.000000 1.000000 0.000000 0.00000
ORIGX3 0.000000 0.000000 1.000000 0.00000
SCALE1 0.015501 0.000000 0.000000 0.00000
SCALE2 0.000000 0.015501 0.000000 0.00000
SCALE3 0.000000 0.000000 0.008971 0.00000
ATOM 1 N ASP A 229 29.461 51.231 44.569 1.00 47.64 N
ATOM 2 CA ASP A 229 29.341 51.990 43.290 1.00 47.13 C
ATOM 3 C ASP A 229 30.455 51.566 42.330 1.00 45.62 C
ATOM 4 O ASP A 229 31.598 51.376 42.743 1.00 47.18 O
ATOM 5 CB ASP A 229 29.433 53.493 43.567 1.00 49.27 C
ATOM 6 CG ASP A 229 28.817 54.329 42.463 1.00 51.26 C
ATOM 7 OD1 ASP A 229 27.603 54.172 42.206 1.00 53.47 O
ATOM 8 OD2 ASP A 229 29.542 55.145 41.856 1.00 52.96 O
ATOM 9 N MET A 230 30.119 51.424 41.051 1.00 41.99 N
ATOM 10 CA MET A 230 31.092 51.004 40.043 1.00 36.38 C
首先,我需要仅提取标记ATOM行的第四列,其是氨基酸序列,其特异性原子是的一部分。我在这里完成了。
import gzip
class Manual_Seq:
def parseSeq(self, path):
with gzip.open(path,'r') as file_content:
for line in file_content:
newLine = line.split(' ')[0]
if newLine == 'ATOM':
AA = line[17]+line[18]+line[19]
print AA
其产生这种
ASP
ASP
ASP
.....
MET
但我现在需要的输出,是只输出第一ASP和第一次见面和等,并将它们连接起来所以它会是这样的。
ASPMET
我想也许我会尽力重复先行线,直到它从第一输出不同的比较,但我不确定我会怎么做,如果你有任何其他想法或我的代码的任何改进,请随时提交您的建议,谢谢。 我还需要一提的是有其实可以在一个文件中两个相同的氨基酸,所以输出可以是“ASP MET ASP”
只是为了澄清列表中的字符串:你为什么第一个'MET'配对第一个'ASP'?是用第三列中的匹配值做什么?即您是否根据第3列中的条目配对第4列值? – DatHydroGuy
@DatHydroGuy这是为了打印出相关蛋白质的序列。正如你所看到的,第三列是原子的名字,第四列是原子所属的序列。而一系列的ASP将始终具有这些特定顺序的原子。所以这意味着ASP是该链序列中的第一个氨基酸,所以它会像ASPMET ...(一些其他氨基酸)。而且由于ASP总是有这8个原子的顺序,所以我们不需要打印ASP * 8,而是暗示它。 – GokuBabs