如何在python中获取单词后的数字

2024-09-21 05:46:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下行的大文件DDD-1126N|refseq:NP_285726|uniprotkb:P00112DDD-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)]

{}中的问题是10和26,当它是26时,我获取完整的数字。我是编程新手,所以我正在寻找一些东西来获取单词后面的完整数字

x = 'uniprotkb:'
f = open('m.txt')
for line in f:
  if x in line:
    print the number after x

Tags: 文件intxt密码fornpline数字
3条回答

使用正则表达式:

import re
for line in open('m.txt'):
    match = re.search('uniprotkb:P(\d+)', line)
    if match:
        print match.group(1)

如果x是静态的,并且总是在每行末尾匹配一个子字符串(如"DDD-1126N|refseq:NP_285726|uniprotkb:P00112"),那么re模块在这里是完全不必要的:

x = 'uniprotkb:'
f = open('m.txt')
for line in f:
  if x in line:
    print line[line.find(x)+len(x):]

编辑: 回答你的评论。如果它们由管道字符(|)分隔,则可以执行以下操作:

sep = "|"
x = 'uniprotkb:'
f = open('m.txt')
for line in f:
  if x in line:
    matches = [l[l.find(x)+len(x):] for l in line.split(sep) if l[l.find(x)+len(x):]]
    print matches

如果m.txt具有以下行:

DDD-1126N|uniprotkb:285726|uniprotkb:P00112

然后,上述将输出:

['285726', 'P00112']

sep = "|"替换为任何列分隔符

import re
regex = re.compile('uniprotkb:P([0-9]*)')
print regex.findall(string)

相关问题 更多 >

    热门问题