Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 111 additions & 1 deletion examples/python3/scaffold-app/wegene_utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-

__all__ = ['process_raw_genome_data', 'is_genotype_exist', 'is_wegene_format']
__all__ = ['process_raw_genome_data', 'is_genotype_exist', 'is_wegene_format', 'get_mt', 'get_y', 'get_simple_mt', 'get_simple_y', 'to_markdown_table']

import re
import sys
import gzip
import base64
Expand Down Expand Up @@ -65,3 +66,112 @@ def is_genotype_exist(input, rsid):

def is_wegene_format(format_str):
return 'wegene_' in format_str


#这是一个获取用户mt单倍群的函数
def get_mt(inputs):
return inputs['haplogroup']['mt']['haplogroup']


#这是一个获取用户y单倍群的函数
def get_y(inputs):
return inputs['haplogroup']['y']['haplogroup']


#这是一个获取用户simple mt单倍群的函数
def get_simple_mt(inputs,length):
inputs = get_mt(inputs)
letter = re.split(r'\d+',inputs)
number = re.split(r'\D+',inputs)
while '' in letter:
letter.remove('')
while '' in number:
number.remove('')
#处理当指定切割长度比mt实际长度长的情况
if len(letter + number) <= length:
output = inputs
#处理特殊mt
elif len(inputs) == 1 or "'" in inputs:
output = inputs
else:
min_num = min(len(letter),len(number))
output_list = []
for element in range(min_num):
output_list.append(letter[element])
output_list.append(number[element])
output = ''.join(output_list[0:length])
return output


#这是一个获取用户simple y单倍群的函数
def get_simple_y(inputs,length):
inputs = get_y(inputs)
letter = re.split(r'\d+',inputs)
number = re.split(r'\D+',inputs)
while '' in letter:
letter.remove('')
while '' in number:
number.remove('')
#处理当指定切割长度比y实际长度长的情况
if len(letter + number) <= length:
output = inputs
#处理边缘y
elif len(inputs) == 1 or "~" in inputs or inputs.isalpha() is True:
output = inputs
else:
min_num = min(len(letter),len(number))
output_list = []
for element in range(min_num):
output_list.append(letter[element])
output_list.append(number[element])
output = ''.join(output_list[0:length])
return output


#这是一个将嵌套list转化为markdown表格形式的函数
def to_markdown_table(input_head,input_body,output_style):
result_list = []
column_num = len(input_head)
for row in input_body:
element_list = []
for element in row:
element_list.append(str(element))
result_list.append('|'+'|'.join(element_list))
body_md = '|\n'.join(result_list)+'|'
if output_style == 'left':
style = [':---']
if output_style == 'right':
style = ['---:']
if output_style == 'center':
style = [':---:']
element_list = []
for element in input_head:
element_list.append(str(element))
head_md = '|'+'|'.join(element_list)+'|\n'
style_md = '|'+'|'.join(style * column_num)+'|\n'
result = head_md + style_md + body_md
return result
'''
在 to_markdown_table(input_head,input_body,output_style)函数中
input_head input_body output_style分别指的是 表格的表头 表格内容 以及 文字风格
文字风格 有三种选择,可以是 left right 或 center 分别代表 文字左对齐 文字右对齐 和 文字居中
如果输出结果中包含 整型 或 浮点型 无需对结果进行 str() 处理,函数中会自动处理

调用本函数的示例代码如下:

head = [1,2,3,4,5]
body = [
[7,8,9,0,1],
[4,7,9,10,4]
]
result = to_markdown_table(head,body,'center')
print(result)

本段代码输出结果如下

|1|2|3|4|5|
|:---:|:---:|:---:|:---:|:---:|
|7|8|9|0|1|
|4|7|9|10|4|

'''