我有一个包含以下行一个巨大的文件DDD-1126N|refseq:NP_285726|uniprotkb:P00112和DDD-1081N|uniprotkb:P12121,我想以后抢号uniprotkb.
这是我的代码:
x = 'uniprotkb:P'
f = open('m.txt')
for line in f:
print line.find(x)
print line[36:31 + len(x)]
Run Code Online (Sandbox Code Playgroud)
问题line.find(x)在于10和26,我在26岁时获取完整的数字.我是编程的新手,所以我正在寻找一些东西来获取完整的数字.
x = 'uniprotkb:'
f = open('m.txt')
for line in f:
if x in line:
print the number after x
Run Code Online (Sandbox Code Playgroud)
inf*_*red 10
使用正则表达式:
import re
for line in open('m.txt'):
match = re.search('uniprotkb:P(\d+)', line)
if match:
print match.group(1)
Run Code Online (Sandbox Code Playgroud)
import re
regex = re.compile('uniprotkb:P([0-9]*)')
print regex.findall(string)
Run Code Online (Sandbox Code Playgroud)
如果该模块是静态的并且始终与每行末尾的子字符串匹配(如),则该re模块在这里是完全不必要的: x"DDD-1126N|refseq:NP_285726|uniprotkb:P00112"
x = \'uniprotkb:\'\nf = open(\'m.txt\')\nfor line in f:\n\xc2\xa0 if x in line:\n\xc2\xa0 \xc2\xa0 print line[line.find(x)+len(x):]\nRun Code Online (Sandbox Code Playgroud)\n\n编辑: \n回答你的评论。如果它们由竖线字符 ( |) 分隔,那么您可以这样做:
sep = "|"\nx = \'uniprotkb:\'\nf = open(\'m.txt\')\nfor line in f:\n\xc2\xa0 if x in line:\n\xc2\xa0 \xc2\xa0 matches = [l[l.find(x)+len(x):] for l in line.split(sep) if l[l.find(x)+len(x):]]\n print matches\nRun Code Online (Sandbox Code Playgroud)\n\n如果 m.txt 有以下行:
\n\nDDD-1126N|uniprotkb:285726|uniprotkb:P00112\nRun Code Online (Sandbox Code Playgroud)\n\n那么上面会输出:
\n\n[\'285726\', \'P00112\']\nRun Code Online (Sandbox Code Playgroud)\n\n替换sep = "|"为任何列分隔符。
| 归档时间: |
|
| 查看次数: |
17555 次 |
| 最近记录: |