生信算法1 - DNA测序算法实践之序列操作

生信序列基本操作算法

建议在Jupyter实践,python版本3.9

1. 定义DNA序列

seq = 'ACGT'

# 从序列指定索引的碱基
seq[1]
# 'C'

# 序列长度
len(seq)
# 4

2. 序列拼接

# 序列拼接 - 字符串
seq1 = 'AACC'
seq2 = 'GGTT'
print(seq1 + seq2)
# AACCGGTT

# 序列拼接 - 列表
seqs = ['A', 'C', 'G', 'T']
print(''.join(seqs))

3. 序列生成

# 随机产生ATCG碱基
import random
random.choice('ACGT')

# 生成DNA序列
import random
seq = ''
for _ in range(100):
    seq += random.choice('ACGT')
print(seq)
# GTGTCGACACCCGAGTGTTCACAAGTGGTCTTTCGGCACTTTGCTCTGAGTGGCGCGCTTAGCTATAAGGGCAAGTATCCTAGTCATATCCCGAAGGCGT

# 生成DNA序列方法2
seq = ''.join([random.choice('ACGT') for _ in range(10)])
print(seq)
# ATGGATGTCT

4. 序列截取

seq = "ATGGATGTCT"
seq[1:3]
# 'AT'

seq[:3]
#'GAT'

seq[7:]
# 'GAC'

seq[-3:]
# 'GAC'

5. 序列比较

# 获取序列最长相同前缀
def longestCommonPrefix(s1, s2):
    i = 0
    while i < len(s1) and i < len(s2) and s1[i] == s2[i]:
        i += 1
    return s1[:i]
longestCommonPrefix('ACCATTG', 'ACCAAGTC')
# 'ACCA'

# 比较序列是否相同
def match(s1, s2):
    if not len(s1) == len(s2):
        return False
    for i in range(0, len(s1)):
        if not s1[i] == s2[i]:
            return False
    return True
match('ACCATTG', 'ACCATTG')
# False

# 序列字符串比较
'ACCATTG' == 'ACCATTG'
True

5. 获取互补序列

def Complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
    t = ''
    for base in seq:
        t = t + complement[base]
    return t
Complement('ACCATTG')
# 'TGGTAAC'

6. 获取反向互补序列

def reverseComplement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
    t = ''
    for base in seq:
        t = complement[base] + t
    return t
reverseComplement('ACCATTG')
# 'CAATGGT'

7. 读取基因组fasta序列文件

def readGenome(filename):
    genome = ''
    with open(filename, 'r') as f:
        for line in f:
            # 忽略文件头信息
            if not line[0] == '>':
                genome += line.rstrip()
    return genome
genome = readGenome('lambda_virus.fa')

len(genome)
# 48502

genome[:100]
# 'GGGCGGCGACCTCGCGGGTTTTCGCTATTTATGAAAATTTTCCGGTTTAAGGCGTTTCCGTTCTTCTTCGTCATAACTTAATGTTTTTATTTAAAATACC'

7. 计算基因组fasta文件ATCG碱基的数量

# 循环遍历方法
counts = {'A': 0, 'C': 0, 'G': 0, 'T': 0}
for base in genome:
    counts[base] += 1
print(counts)
# {'A': 12334, 'C': 11362, 'G': 12820, 'T': 11986}

# 调用库
import collections
collections.Counter(genome)
# Counter({'G': 12820, 'A': 12334, 'T': 11986, 'C': 11362})
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信与基因组学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值