我有一个文本文件,里面有一堆数据。在这个文本文件的某些实例中,我试图替换其中的以下字母:a->G、C->T等。基本上,我知道我需要读取这个文件。在文件的行中搜索。查找出现的这些字符,然后替换。基本上-->ACTG应该是GTCA。
到目前为止,我的代码如下:
f = open("actg.txt", "r")
table = str.maketrans("actgACTG", "gtcagtca")
print(f.read().translate(str.maketrans('ACTGactg','gtcagtca')))
print(table)
此处的输出工作正常。然而,它正在更改整个文件中此类字母的所有实例。
如果我只想让角色在这个特定的序列中发生这样的变化呢?否则,它会更改整个文件中的每个"a"和每个"g"。我想保持正常句子的完整性,只有当出现这种特殊的序列时才会做出这种改变。
您可以将str.translate
与string.maketrans
(Python 2.x)或str.maketrans
(Python 3.x)结合使用:
Python 2.x:
>>> import string
>>> instring = 'ABCD'
>>> instring.translate(string.maketrans('ACac','gtgt'))
'gBtD'
Python 3.x:
>>> instring = 'ABCD'
>>> instring.translate(str.maketrans('ACac','gtgt'))
'gBtD'
translate
需要一个256个字符的映射表。这就是string.maketrans
创建的,将每个字符映射到其自身,但第一个参数字符串中的字符映射到第二个参数字符串的相应字符除外。
您可以使用re-lib:同时更改大小写
In [3]: re.sub('[Aa]', 'g', 'HAllat')
Out[3]: 'Hgllgt'
这是文档
Python 2:
>>> from string import maketrans
>>> table = maketrans("acgtACGT", "gtcagtca")
Python 3:
>>> table = str.maketrans("acgtACGT", "gtcagtca")
两者:
>>> "acGTagTTcGTAC".translate(table)
'gtcagcaatcagt'