目标:我正在尝试在Python RegEx中执行切换,其中split不能完全按照我的意愿执行.我需要在一个模式中剪切,但在角色之间.
我在找什么:
我需要在字符串中识别下面的模式,并将字符串拆分到管道的位置.管道实际上不在字符串中,它只显示我要分割的位置.
图案: CDE|FG
串: ABCDEFGHIJKLMNOCDEFGZYPE
结果: ['ABCDE', 'FGHIJKLMNOCDE', 'FGZYPE']
我尝试过的:
我似乎使用带括号的split是接近的,但是它并没有像我需要的那样将搜索模式保持在结果上.
re.split('CDE()FG', 'ABCDEFGHIJKLMNOCDEFGZYPE')
给人,
['AB', 'HIJKLMNO', 'ZYPE']
当我真的需要的时候,
['ABCDE', 'FGHIJKLMNOCDE', 'FGZYPE']
动机:
使用RegEx进行练习,并想看看我是否可以使用RegEx制作一个脚本来预测使用特定蛋白酶消化蛋白质的片段.
我被要求研究蛋白质结构可视化,比如RasMol,用户将打开一个pdb文件来获得蛋白质结构.
我如何从pdb文件生成蛋白质结构?
如果我使用OpenGL或VTK,我想用Python编写代码并可视化结构?还有其他模块可以在这方面帮助我吗?
使用biopython库,我想删除列表中列出的残留物,如下所示。该线程(http://pelican.rsvs.ulaval.ca/mediawiki/index.php/Manipulated_PDB_files_using_BioPython)提供了一个去除残留物的示例。我有以下代码来去除残留物
residue_ids_to_remove = [105, 5, 8, 10, 25, 48]
structure = pdbparser.get_structure("3chy", "./3chy.pdb")
first_model = structure[0]
for chain in first_model:
for residue in chain:
id = residue.id
if id[1] in residue_ids_to_remove:
chain.detach_child(id[1])
modified_first_model = first_model
Run Code Online (Sandbox Code Playgroud)
但这段代码不起作用并引发了错误
def detach_child(self, id):
"Remove a child."
child=self.child_dict[id]
KeyError: '105'
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?
或者,我可以使用accept_residue()并将其写入PDB。我不想这样跟踪,因为我想在内存中执行此操作以进行进一步处理。
我正在研究一个项目(我必须在Perl中实现它,但我不擅长它),它读取DNA并找到它的RNA.将RNA分成三联体以获得其等同的蛋白质名称.我将解释一下这些步骤:
1)将以下DNA转录为RNA,然后使用遗传密码将其转化为氨基酸序列
例:
TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT
Run Code Online (Sandbox Code Playgroud)
2)为了转录DNA,首先用每个DNA替换它的对应物(即G表示C,C表示G,T表示A,A表示T):
TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT
AGTATTATGCAAAACATAAGCGGTCGCGAAGCCACA
Run Code Online (Sandbox Code Playgroud)
接下来,记住胸腺嘧啶(T)碱基变成尿嘧啶(U).因此我们的序列变为:
AGUAUUAUGCAAAACAUAAGCGGUCGCGAAGCCACA
Run Code Online (Sandbox Code Playgroud)
使用遗传密码就是这样
AGU AUU AUG CAA AAC AUA AGC GGU CGC GAA GCC ACA
Run Code Online (Sandbox Code Playgroud)
然后在遗传密码表中查找每个三联体(密码子).所以AGU变成丝氨酸,我们可以写成Ser,或者只是S. AUU变成Isoleucine(Ile),我们写成I.我继续这样做,我们得到:
SIMQNISGREAT
Run Code Online (Sandbox Code Playgroud)
我会给蛋白质表:

那么如何在Perl中编写该代码呢?我将编辑我的问题并编写我所做的代码.
我写了一个python脚本来绘制泛素蛋白的'Ramachandran Plot'.我正在使用biopython.我正在使用pdb文件.我的脚本如下:
import Bio.PDB
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
phi_psi = ([0,0])
phi_psi = np.array(phi_psi)
pdb1 ='/home/devanandt/Documents/VMD/1UBQ.pdb'
for model in Bio.PDB.PDBParser().get_structure('1UBQ',pdb1) :
for chain in model :
polypeptides = Bio.PDB.PPBuilder().build_peptides(chain)
for poly_index, poly in enumerate(polypeptides) :
print "Model %s Chain %s" % (str(model.id), str(chain.id)),
print "(part %i of %i)" % (poly_index+1, len(polypeptides)),
print "length %i" % (len(poly)),
print "from %s%i" % (poly[0].resname, poly[0].id[1]),
print "to %s%i" % (poly[-1].resname, poly[-1].id[1])
phi_psi = poly.get_phi_psi_list()
for …Run Code Online (Sandbox Code Playgroud) 我确信这已被问到但我找不到,所以我对冗余道歉.
我想使用grep或egrep来查找其中包含"P"或"CA"的每一行,并将它们传递给新文件.我可以使用以下方法轻松完成:
egrep ' CA ' all.pdb > CA.pdb
Run Code Online (Sandbox Code Playgroud)
要么
egrep ' P ' all.pdb > P.pdb
Run Code Online (Sandbox Code Playgroud)
我是regex的新手,所以我不确定它的语法or.
更新: 输出行的顺序很重要,即我不希望输出对匹配的字符串排序.以下是一个文件的前8行示例:
ATOM 1 N THR U 27 -68.535 88.128 -17.857 1.00 0.00 1H5 N
ATOM 2 HT1 THR U 27 -69.437 88.216 -17.434 0.00 0.00 1H5 H
ATOM 3 HT2 THR U 27 -68.270 87.165 -17.902 0.00 0.00 1H5 H
ATOM 4 HT3 THR U 27 -68.551 88.520 -18.777 0.00 0.00 1H5 H
ATOM 5 CA LYS B 122 …Run Code Online (Sandbox Code Playgroud) 必须删除 pdb 文件中的杂原子。这是代码,但它不适用于我的测试 PDB 1C4R。
for model in structure:
for chain in model:
for reisdue in chain:
id = residue.id
if id[0] != ' ':
chain.detach_child(id)
if len(chain) == 0:
model.detach_child(chain.id)
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我对 perl 编程有点陌生,我有一个可以这样表述的散列:
$hash{"snake"}{ACB2} = [70, 120];
$hash{"snake"}{SGJK} = [183, 120];
$hash{"snake"}{KDMFS} = [1213, 120];
$hash{"snake"}{VCS2} = [21, 120];
...
$hash{"bear"}{ACB2} = [12, 87];
$hash{"bear"}{GASF} = [131, 87];
$hash{"bear"}{SDVS} = [53, 87];
...
$hash{"monkey"}{ACB2} = [70, 230];
$hash{"monkey"}{GMSD} = [234, 230];
$hash{"monkey"}{GJAS} = [521, 230];
$hash{"monkey"}{ASDA} = [134, 230];
$hash{"monkey"}{ASMD} = [700, 230];
Run Code Online (Sandbox Code Playgroud)
哈希的结构总结如下:
%hash{Organism}{ProteinID}=(protein_length, total_of_proteins_in_that_organism)
Run Code Online (Sandbox Code Playgroud)
我想根据某些条件对这个哈希进行排序。首先,我只想考虑那些蛋白质总数大于100的生物,然后我想显示生物的名称以及最大的蛋白质及其长度。
为此,我将采用以下方法:
foreach my $org (sort keys %hash) {
foreach my $prot (keys %{ $hash{$org} }) {
if ($hash{$org}{$prot}[1] > 100) {
@sortedarray = …Run Code Online (Sandbox Code Playgroud)