我有一个包含以下行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)]
line.find(x)
中的问题是10和26,当它是26时我抓住完整的数字。我是编程的新手,所以我正在寻找一些东西来获取完整的数字。< / p>
x = 'uniprotkb:'
f = open('m.txt')
for line in f:
if x in line:
print the number after x
答案 0 :(得分:8)
使用正则表达式:
import re
for line in open('m.txt'):
match = re.search('uniprotkb:P(\d+)', line)
if match:
print match.group(1)
答案 1 :(得分:6)
import re
regex = re.compile('uniprotkb:P([0-9]*)')
print regex.findall(string)
答案 2 :(得分:3)
如果 修改强>
回答你的评论。如果它们用竖线字符( 如果m.txt包含以下行: 然后上面会输出: 将re
是静态的并且始终匹配每行末尾的子字符串(例如x
),那么{strong} {<1}}模块是非常不必要的。< / p>
"DDD-1126N|refseq:NP_285726|uniprotkb:P00112"
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
DDD-1126N|uniprotkb:285726|uniprotkb:P00112
['285726', 'P00112']
替换为列分隔符。
答案 3 :(得分:0)
csv
module来读取TSV文件。
但通常,您可以使用正则表达式:
import re
regex = re.compile(r"(?<=\buniprotkb:)\w+")
for line in f:
match = regex.search(line)
if match:
print match.group()
正则表达式匹配一串字母数字字符(如果它前面有uniprotkb:
。