Python 如何从一个序列中仅获取5毫秒

Python 如何从一个序列中仅获取5毫秒,python,for-loop,Python,For Loop,我有一个包含数百万序列的文件。我想做的是从我文件的每一行中的每个序列中获取5个字符 我的文件如下所示: CGATGCATAGGAA GCAGGAGTGATCC 我的代码是: with open('test.txt','r') as file: for line in file: for i in range(len(line)): kmer = str(line[i:i+5]) if len(kmer) == 5:

我有一个包含数百万序列的文件。我想做的是从我文件的每一行中的每个序列中获取5个字符

我的文件如下所示:

CGATGCATAGGAA
GCAGGAGTGATCC
我的代码是:

with open('test.txt','r') as file:
    for line in file:
        for i in range(len(line)):
            kmer = str(line[i:i+5])
            if len(kmer) == 5:
                print(kmer)
            else:
                pass
有了这段代码,我不应该得到4个mers,但我甚至有一个
if语句
,长度为5个mers。有人能帮我吗?谢谢

我的意见是:

CGATG
GATGC
ATGCA
TGCAT
GCATA
CATAG
ATAGG
TAGGA
AGGAA
GGAA

GCAGG
CAGGA
AGGAG
GGAGT
GAGTG
AGTGA
GTGAT
TGATC
GATCC
ATCC
但理想输出应仅为长度等于5的输出(每行单独):


在文件中迭代时,每个字符都表示在某个位置。特别是,每行的最后一个字符是您正在打印的换行符
\n

with open('test.txt') as f: data = list(f)

# data[0] == 'CGATGCATAGGAA\n'
# data[1] == 'GCAGGAGTGATCC\n'
因此,您试图从第一行打印的最后一个子字符串是
'GGAA\n'
,它的长度为5,但它提供了额外的空格和4mers的外观。其中一条意见提出了令人满意的解决方案,但当您知道问题的根源时,您有很多选择:

with open('test.txt', 'r') as file:
    for line_no, line in enumerate(file):
        if line_no: print()  # for the space between chunks which you seem to want in your final output -- omit if not desired
        line = line.strip()  # remove surrounding whitespace, including the pesky newlines
        for i in range(len(line)):
            kmer = str(line[i:i+5])
            if len(kmer) == 5:
                print(kmer)
            else:
                pass

什么是5英里?当您查看(检查/打印)中间值时,是否注意到任何错误?如果您现在正在使用IDE,那么现在正是学习其调试功能的好时机:
for line…:line=line.strip();对于范围内的i(len(line)-4):…
如果您现在正在使用IDE,那么现在是学习其调试功能或内置功能的好时机。在程序的关键点打印内容可以帮助您跟踪正在发生或未发生的事情。5“MER”的意思是用五个字母来读取每一行,因此文件中的行应该是CGATG,然后是GATGC,然后是ATGCA。。。直到它到达终点。这些输出应该分别打印txt文件中的每一行。我更新了问题
with open('test.txt', 'r') as file:
    for line_no, line in enumerate(file):
        if line_no: print()  # for the space between chunks which you seem to want in your final output -- omit if not desired
        line = line.strip()  # remove surrounding whitespace, including the pesky newlines
        for i in range(len(line)):
            kmer = str(line[i:i+5])
            if len(kmer) == 5:
                print(kmer)
            else:
                pass