Проект: парсинг UniProt
UniProt — база знаний о протеинах. Она связывает сами протеины с последовательностями генов, кодирующими их.
Она сохранена в одном маленьком текстовом файле и я решил, что пример парсинга этого файла на Python может быть полезен. Структурно, файл состоит из описания, заголовка таблицы, контента и лицензии. Мы отделяем от файла всё лишнее, потому, что так его можно читать построчно.
Требуется информация от эксперта! |
---|
Запрос: Я не очень хорошо понимаю, почему в заголовке базы UniProt говорят только о первой хромосоме. |
Экспертиза: Биолог |
Пример экспорта в JSON
#!/usr/bin/env python3
"""
Read and convert humchr01.txt items.
"""
import re
import json
def main():
"""
Load processed txt file with no header and license, scan, build JSON data, export.
"""
gene_filename = "humchr01_for_splitting.txt"
with open(gene_filename, 'r') as gene_file:
original_genes = gene_file.read().splitlines()
new_genes = []
for gene in original_genes:
new_gene = {}
new_gene['gene_name'], remainder = re.split("\s+", gene, maxsplit=1)
new_gene['chromosomal_position'], remainder = re.split("\s+", remainder, maxsplit=1)
new_gene['swiss_prot_ac'], remainder = re.split("\s+", remainder, maxsplit=1)
new_gene['swiss_prot_ename'], remainder = re.split("\s+", remainder, maxsplit=1)
mim_code = ""
description = ""
if re.match(r'^\d+', remainder):
new_gene['mim_code'], description = re.split("\s+", remainder, maxsplit=1)
else:
new_gene['description'] = remainder
new_genes.append(new_gene)
with open("humchr01.json", "w") as humchr_json_file:
json.dump(new_genes, humchr_json_file, ensure_ascii=False, sort_keys=True, indent=4)
if __name__ == '__main__':
main()
Пример экспорта в CSV
Tab-delimited.
#!/usr/bin/env python3
"""
Read and convert humchr01.txt items.
"""
import re
import csv
def main():
"""
Load processed txt file with no header and license, scan, build CSV data, export.
"""
gene_filename = "humchr01_for_splitting.txt"
with open(gene_filename, 'r') as gene_file:
original_genes = gene_file.read().splitlines()
new_genes = []
for gene in original_genes:
new_gene = {}
new_gene['gene_name'], remainder = re.split("\s+", gene, maxsplit=1)
new_gene['chromosomal_position'], remainder = re.split("\s+", remainder, maxsplit=1)
new_gene['swiss_prot_ac'], remainder = re.split("\s+", remainder, maxsplit=1)
new_gene['swiss_prot_ename'], remainder = re.split("\s+", remainder, maxsplit=1)
new_gene['mim_code'] = ""
new_gene['description'] = ""
if re.match(r'^\d+', remainder):
new_gene['mim_code'], description = re.split("\s+", remainder, maxsplit=1)
else:
new_gene['description'] = remainder
new_genes.append(new_gene)
with open("humchr01.csv", 'wb') as csv_file:
writer = csv.writer(csv_file, delimiter='\t', quotechar='\\', quoting=csv.QUOTE_MINIMAL)
for gene in new_genes:
writer.writerow([
gene['gene_name'],
gene['chromosomal_position'],
gene['swiss_prot_ac'],
gene['swiss_prot_ename'],
gene['mim_code'],
gene['description']
])
if __name__ == '__main__':
main()
Заметка о лицензии
UniProt хотят, чтобы на них ссылались в научных работах. На образец можно посмотреть, пройдя по ссылке.
Creative commons
Вот сам текст лицензии из файла UniProt. "Copyrighted by the UniProt Consortium, see https://www.uniprot.org/terms. Distributed under the Creative Commons Attribution (CC BY 4.0) License"