0

我有一个包含大量数据的文本文件。在此文本文件的某些情况下,我尝试替换其中的以下字母: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”。我想保持正常句子的完整性,并且仅在存在这种特定序列时才进行此更改。

4

3 回答 3

0

您可以使用 re lib 同时更改大小写:

In [3]: re.sub('[Aa]', 'g', 'HAllat')
Out[3]: 'Hgllgt'

这是文档

于 2013-02-13T17:31:27.127 回答
0

您可以str.translatestring.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创建,将每个字符映射到自身,除了第一个参数字符串中的字符映射到第二个参数字符串中的相应字符。

于 2013-02-13T17:29:23.030 回答
0

蟒蛇2:

>>> from string import maketrans
>>> table = maketrans("acgtACGT", "gtcagtca")

蟒蛇 3:

>>> table = str.maketrans("acgtACGT", "gtcagtca")

两个都:

>>> "acGTagTTcGTAC".translate(table)
'gtcagcaatcagt'
于 2013-02-13T17:30:41.947 回答