12
返回列表 发新帖
楼主: chenming - 

【python练习题二】正则表达式

[复制链接]

0

主题

3

帖子

43

积分

新手上路

Rank: 1

积分
43
发表于 2019-12-6 16:21:49 | 显示全部楼层
本帖最后由 Riven 于 2019-12-6 16:26 编辑

test1.
  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-

  3. import os
  4. import gzip
  5. import re
  6. import argparse

  7. parser = argparse.ArgumentParser()
  8. parser.add_argument('-i', '--infile', required=True, help="the inpute file path")
  9. parser.add_argument('-o', '--outfile', help="the output file path", default="gene.xls")
  10. args = vars(parser.parse_args())

  11. inf = os.path.abspath(args['infile'])
  12. outf = os.path.abspath(args['outfile'])

  13. def safe_open(file, mode):
  14.     if file.endswith(".gz"):
复制代码


  1.         return gzip.open(file, mode)
  2.     else:
  3.         return open(file, mode)

  4. def extract_gene(str):
  5.     pattern = re.compile('GENE=(\w+);')
  6.     gene_name = pattern.search(str)
  7.     # print(gene_name)
  8.     return gene_name.group(1)

  9. with safe_open(inf, 'rb') as infile, open(outf, 'w') as outfile:
  10.     for line in infile:
  11.         if line.startswith('#'):
  12.             continue
  13.         else:
  14.             g_name = extract_gene(line)
  15.             outfile.write(g_name + '\n')
复制代码


回复

使用道具 举报

0

主题

3

帖子

43

积分

新手上路

Rank: 1

积分
43
发表于 2019-12-6 16:22:26 | 显示全部楼层
本帖最后由 Riven 于 2019-12-6 16:25 编辑
  1. test2.
  2. #!/usr/bin/env python
  3. # -*- coding=utf-8 -*-

  4. import os
  5. import gzip
  6. import re
  7. import argparse
  8. from Bio import SeqIO

  9. parser = argparse.ArgumentParser()
  10. parser.add_argument('-r', '--ref', help="the reference file path, default:human b37, *.fasta", default="/PUBLIC/database/HUMAN/genome/Human/human_g1k_v37_decoy.fasta")
  11. parser.add_argument('-c', '--chr', help="specify the chromosome to search", required=True)
  12. parser.add_argument('-b', '--bases', help="the group of bases to search", required=True)
  13. parser.add_argument('-o', '--outfile', help="the output file path", default="search_out.xls")
  14. args = vars(parser.parse_args())
  15. print(args)

  16. ref = os.path.abspath(args['ref'].strip())
  17. chr = args['chr'].strip()
  18. base_group = args['bases'].strip()
  19. out = os.path.abspath(args['outfile'].strip())

  20. def get_base_group_info(ref, chrom, residue, file):
  21.     with open(file, 'w') as out:
  22.         recod_dict = SeqIO.to_dict(SeqIO.parse(ref, "fasta"))
  23.         chr_seq = str(recod_dict[chrom].seq)
  24.         match = re.finditer(residue, chr_seq)
  25.         for i in match:
  26.             tup = i.span()
  27.             start_pos = int(tup[0]) + 1
  28.             end_pos = tup[1]
  29.             # out.write(chrom + ':' + str(start_pos) + '-' + end_pos + '\n')
  30.             out.write(chrom + ':' + str(start_pos) + '-' + str(end_pos) + '\n')

  31. if __name__ == "__main__":
  32.     get_base_group_info(ref, chr, base_group, out)
复制代码


回复

使用道具 举报

0

主题

3

帖子

43

积分

新手上路

Rank: 1

积分
43
发表于 2019-12-6 16:22:55 | 显示全部楼层
本帖最后由 Riven 于 2019-12-6 16:25 编辑
  1. test3.

  2. #!/usr/bin/env python
  3. # -*- coding=utf-8 -*-

  4. import re
  5. import os
  6. import argparse

  7. parser = argparse.ArgumentParser()
  8. parser.add_argument('-i', '--infile', help="infile path", required=True)
  9. parser.add_argument('-o', '--outfile', help="outfile path", default="out_share.xls")
  10. args = vars(parser.parse_args())

  11. infile = os.path.abspath(args['infile'].strip())
  12. outfile = os.path.abspath(args['outfile'].strip())

  13. def is_variation(string):
  14.     if string == "0/0" or string == "./.":
  15.         return False
  16.     else:
  17.         return True

  18. var_sp_lst =[]
  19. with open(infile, 'r') as inf, open(outfile, 'w') as out:
  20.     idx_lst = []
  21.     header_lst = []
  22.     for line in inf:
  23.         if line.startswith('Priority'):
  24.             header_lst = line.strip().split('\t')
  25.             out.write(line.strip('\n') + '\t' + 'Variation_sample' + '\n')
  26.             match_obj = re.search(r'FORMAT(.+)Ori_REF', line)
  27.             sample_lst = match_obj.group(1).strip('\t').split('\t')
  28.             for i in sample_lst:
  29.                 sp_idx = header_lst.index(i)
  30.                 idx_lst.append(sp_idx)
  31.         else:
  32.             lst = []
  33.             content_lst = line.strip().split('\t')
  34.             for j in idx_lst:
  35.                 variation_info = content_lst[j].split(':')[0]
  36.                 if is_variation(variation_info):
  37.                     lst.append(header_lst[j])
  38.                 else:
  39.                     continue
  40.             # print(lst)
  41.             if len(lst)==0:
  42.                 out.write(line.strip('\n') + '\t' + '.' + '\n')
  43.             else:
  44.                 out.write(line.strip('\n') + '\t' + ','.join(lst) + '\n')
复制代码


回复

使用道具 举报

0

主题

1

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2019-12-6 16:26:48 | 显示全部楼层

练习题1

本帖最后由 helili 于 2019-12-6 16:28 编辑

#!usr/bin/env python
#-*- coding=utf-8 -*-

import os
import re
import sys

infile = sys.argv[1]
outfile = sys.argv[2]

def safe_open(file,mode):
    file = os.path.abspath(file)
    if not os.path.exists(file):
        exit("%s is not exists" % file)
    if file.endswith('.gz'):
        import gzip
        return gzip.open(file,mode)
    else:
        return open(file,mode)

pattern = re.compile(r'GENE=(.+?);.+')
dic = {}
with safe_open(infile,"r") as f, open(outfile,"w") as out:
    for line in f:
        line = line.strip()
        if line.startswith('#'):
            out.write(line)
            out.write('\n')
        else:
            site = line.split('\t')[0:7]
            info = line.split('\t')[7]
            gene = pattern.findall(info)[0]
            outline = '{}\t{}\t{}\t{}\t{}\t{}\t{}\n'.format(*site)
            out.write(outline)
            out.write(gene+"\n")
f.close()
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-12-6 17:10:36 | 显示全部楼层
回复

使用道具 举报

12
返回列表 发新帖

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则