簡體   English   中英

Python-計算兩個特定字符串之間的字符

[英]Python - Count characters between two specific strings

我制作了一個文本文件,其中包含鹼基的隨機序列(ATCG),並希望在這些序列中找到最長和最短的“閱讀框”。

我能夠通過“ searchfile”和一個for循環來識別起始密碼子和終止密碼子(提到的兩個“特定字符串”),並且還知道計數的基礎(最后是代碼示例),但是我無法我發現有任何可能將這兩個設置為“邊界”。

誰能給我一個提示或告訴我如何調用這樣的函數/操作,以便至少可以在紀錄片中找到它或看起來像什么? 我找到了很多方法來計算各種不同的事物,但沒有一個用於在“ x”和“ y”之間進行計數。

我如何查找要在其間計數的字符串的示例:

searchfile = open('dna.txt', 'r')
for line in searchfile:
    if "ATG" in line: print (line)
searchfile.close()

整個代碼:

import numpy as np

BASES = ('A', 'C', 'T', 'G')
P = (0.25, 0.25, 0.25, 0.25)

def random_dna_sequence(length):
    return ''.join(np.random.choice(BASES, p=P) for _ in range(length))

with open('dna.txt', 'w+') as txtout:
    for _ in range(10):
        dna = random_dna_sequence(50)
        txtout.write(dna)
        txtout.write("\n")


searchfile = open('dna.txt', 'r')
for line in searchfile:
    if "ATG" in line: print (line)
searchfile.close()

searchfile = open('dna.txt', 'r')
for line in searchfile:
    if "ATG" in line: print (line)
    elif "TAG" in line: print (line)
    elif "TAA" in line: print (line)
    elif "TGA" in line: print (line)
    else: print ("no stop-codon detected")
searchfile.close()

旁注:打印說明只是用於測試的臨時占位符。 最后,我想在那一點上將找到的字符串設置為提到的“邊界”(我找不到更好的名稱)。

dna.txt文件中的一些示例行:

GAAGACGCAATAGGTTCACGGCGCTCATAGGCTTGCCCTCATAGGGCTTG
TCTGAGGTAGAAGGAGCTACTGCCGTTGCAGGTGACGCCCACAGTCCTGA
GTTATTACTCCCTGACTGTCATCTGTTCGGATACCGTGCAGCGCATCGAG
AGGAGATAACGCGATCCTGAGACAGTTTACCTATATGTTCACTACGCATG
CCGAGCTGATCCGACTACTGAAGGTGAATTCTGAAGCTAATCTGCAGTTC

這是一個小例子(我使用10和50進行測試),但最后文件應包含10000個序列,每個序列具有1000個字符。

我要做的是這樣的:

with open("dna.txt", 'r') as searchfile:
    all_dna = searchfile.read()
    start = all_dna.index("ATG")
    rem_dna = all_dna[start + 3:]
    end = rem_dna.index("ATG")
    needed_dna = all_dna[start:(end + 3)]
print len(needed_dna)

index查找作為參數傳遞的子字符串出現在字符串中的何處,如果未找到子字符串,則會raise ValueError with是一個關鍵字,可以用作文件I / O的安全預防措施,即使該塊中的代碼導致錯誤,該關鍵字也可以確保正確關閉文件。 如果您不想在“ needed_dna ”中包含開始和結尾的“ ATG”, needed_dna可以將其設置為all_dna[(start + 3):end] 順便說一下,方括號的意思是“取指定字符串的子字符串,該子字符串從冒號前的參數開始(包括零索引),到冒號后的參數結束(不包括零索引,也為零索引)。也可以用於列表,並且可以在不使用冒號的情況下使用,以使字符位於特定索引處。希望這對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM