bioinf/py/4.py

84 lines
3.2 KiB
Python
Raw Normal View History

2024-10-23 16:30:31 +00:00
from Bio import Entrez, SeqIO
from Bio.Seq import Seq
from termcolor import colored
# Ustaw swój adres e-mail (wymagany przez NCBI)
Entrez.email = "baiobelfer@gmail.com"
# Funkcja do pobierania szczegółów genu
def get_gene_info(gene_id):
try:
# Pobierz adnotacje genowe z NCBI
handle = Entrez.efetch(db="gene", id=gene_id, retmode="xml")
records = Entrez.read(handle)
# Wyciągnij podstawowe informacje
gene_ref = records[0]["Entrezgene_gene"]["Gene-ref"]
gene_name = gene_ref.get("Gene-ref_locus", "Brak danych")
summary = records[0].get("Entrezgene_summary", "Brak opisu")
chromosome = "Brak danych"
if "BioSource" in records[0]["Entrezgene_source"]:
chromosome_data = records[0]["Entrezgene_source"]["BioSource"]["BioSource_subtype"]
if chromosome_data:
chromosome = chromosome_data[0].get("SubSource_name", "Brak danych")
exon_count = len(records[0].get("Entrezgene_locus", []))
# Wyświetl podstawowe informacje o genie
print(f"Nazwa genu: {gene_name}")
print(f"Opis: {summary}")
print(f"Chromosom: {chromosome}")
print(f"Liczba eksonów: {exon_count}")
except Exception as e:
print(f"Wystąpił błąd podczas pobierania informacji o genie: {e}")
# Funkcja do załadowania sekwencji genów z pliku FASTA
def load_sequences(file_path):
return list(SeqIO.parse(file_path, "fasta"))
# Znajdź potencjalne sekwencje gRNA (20 nukleotydów + PAM "NGG") w określonym regionie
def find_crispr_sites_in_region(sequence, start, end):
pam = "NGG"
sites = []
# Ogranicz przeszukiwanie do wybranego regionu
target_region = sequence[start:end]
for i in range(len(target_region) - 23):
target = target_region[i:i+20]
pam_site = target_region[i+20:i+23]
if pam_site.endswith("GG"):
# Zapisz pełną sekwencję wraz z lokalizacją w genomie
sites.append((start + i, target + pam_site))
return sites
# Funkcja do kolorowania wyjścia
def print_colored_crispr_sites(sites):
for pos, site in sites:
gRNA = colored(site[:20], 'blue') # Sekwencja gRNA na niebiesko
pam = colored(site[20:], 'red', attrs=['bold']) # PAM na czerwono i pogrubione
print(f"Position: {pos}, CRISPR site: {gRNA}{pam}")
# Przykład użycia
# Zmieniamy na ID genu "DREB2A" odpowiedzialnego za odporność na suszę w Arabidopsis
gene_id = "355350790" # Przykładowe ID genu DREB2A z NCBI
get_gene_info(gene_id)
# Zakładamy, że sekwencja DNA jest już wczytana do pliku FASTA
genes = load_sequences("arabidopsis_genome.fasta")
# Przykładowe pozycje startowe i końcowe genu odpowiedzialnego za odporność na suszę
start_position = 1000 # przykładowa pozycja początkowa
end_position = 2000 # przykładowa pozycja końcowa
for gene in genes:
print(f"\nGene ID: {gene.id}")
crispr_sites = find_crispr_sites_in_region(str(gene.seq), start_position, end_position)
# Wyświetl tylko 5 pierwszych wyników, wraz z ich pozycją w sekwencji DNA i kolorowaniem
print_colored_crispr_sites(crispr_sites[:5])