我是一个蟒蛇新手,但已经用其他语言编程了一段时间。我有一长串DNA(小写)和AA序列(大写)。此外,在文件的开头我有一个大写的蛋白质名称。因此我的文件看起来像这样。
PROTEINNAMEatcgatcg ... JFENVKDFDFLK
我需要在字符串中找到第一个非大写字母,这样我就可以删除蛋白质名称。因此,我想从上面得到的是:
atcgatcg ... JFENVKDFDFLK
我可以通过循环来做到这一点,但这似乎有点过分和效率低下。有一种简单的python方式吗?
我可以使用re.findall(“[A-Z]”,mystring)获取所有大写字母但是我需要进行比较以查看结果与原始字符串的不同之处。
谢谢!
答案 0 :(得分:4)
你的正则表达式几乎就在那里......除了findall还有其他方法:
http://docs.python.org/library/re.html#re.sub
>>> import re
>>> protein_regex = re.compile('^[A-Z]+')
>>> dna = 'PROTEINNAMEatcgatcg... JFENVKDFDFLK'
>>> protein_regex.sub('', dna)
'atcgatcg... JFENVKDFDFLK'
不确定性能,但您也可以
>>> import string
>>> dna.lstrip(string.uppercase)
'atcgatcg... JFENVKDFDFLK'
你有它:
python -m timeit -n 10000 -s 'import re' -s 'protein_regex = re.compile("^[A-Z]+")' -s 'dna = "PROTEINNAMEatcgatcg... JFENVKDFDFLK"' 'protein_regex.sub("", dna)'
10000 loops, best of 3: 1.36 usec per loop
python -m timeit -n 10000 -s 'import string' -s 'dna = "PROTEINNAMEatcgatcg... JFENVKDFDFLK"' 'dna.lstrip(string.uppercase)'
10000 loops, best of 3: 0.444 usec per loop
第二个看起来要快3倍。
答案 1 :(得分:1)
使用re.search():
import re
s1 = "ASDFASDFASDFasdfasdfasdfasdfasdf"
m = re.search("[a-z]", s1)
if m:
print "Digit found at position %d" % m.start()
else:
print "No digit in that string"
答案 2 :(得分:0)
试试这个,它尽可能短:
import re
s = 'PROTEINNAMEatcgatcg... JFENVKDFDFLK'
i = re.search('[a-z]', s).start()
protein, sequences = s[:i], s[i:]
print protein
> PROTEINNAME
print sequences
> atcgatcg... JFENVKDFDFLK