Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我用同样的脚本得到结果?_Python - Fatal编程技术网

Python 为什么我用同样的脚本得到结果?

Python 为什么我用同样的脚本得到结果?,python,Python,我有下面的脚本(见下文),但是我从两个txt文件中得到了两个不同的结果。第一个txt文件包含五个序列,第二个txt文件包含第一个文件中存在的单个序列 第一个文件中的序列: 克列斯尔 RVRFFFPSL QVHPQKVT SLDDYNHLV 赫夫吉斯维克 第一个文件中的序列: 克列斯尔 注:序列klsequesll在上述两个文件中都是通用的 代码: 在这两种情况下,KLSequesll序列的结果不同 疑问: 为什么结果不同?您没有考虑行末出现的换行符(\n,可能还有\r)。如果对文件的行进行迭代,

我有下面的脚本(见下文),但是我从两个txt文件中得到了两个不同的结果。第一个txt文件包含五个序列,第二个txt文件包含第一个文件中存在的单个序列

第一个文件中的序列:

克列斯尔

RVRFFFPSL

QVHPQKVT

SLDDYNHLV

赫夫吉斯维克

第一个文件中的序列:

克列斯尔

注:序列klsequesll在上述两个文件中都是通用的

代码:

在这两种情况下,KLSequesll序列的结果不同

疑问:
为什么结果不同?

您没有考虑行末出现的换行符(
\n
,可能还有
\r
)。如果对文件的行进行迭代,将得到这些字符。例如,假设我有以下文件(file.txt):

如果我跑

with open('file.txt','r') as f:
    lines=[line for line in f]
的元素将是
'foo\n'
'bar\n'
'blah'
。请注意,最后一行没有换行符,因为它是最后一行

当您从第一个文件读入klsequesll时,它不是最后一行,因此它的末尾将有一个
'\n'
。这在计算len(我的kmer)时很重要

在第二个文件中,klsequesll是最后一行,因此末尾没有换行符,使得
len(my_kmer)
不同

你应该做的是:

with open('file.txt', 'r') as f:
    for my_kmer in f:
        my_kmer = my_kmer.rstrip()
        ...

除其他外,这将删除任何换行符。

您能发布一些结果吗?请以后提供一个新的结果。这是很多代码,其中90%与问题无关。顺便说一句,Unix技术上要求行以换行结束。但实际上,这取决于您的文本编辑器。不管怎样,只要在这里提一下,以防有人无法从问题中重现问题。
with open('file.txt','r') as f:
    lines=[line for line in f]
with open('file.txt', 'r') as f:
    for my_kmer in f:
        my_kmer = my_kmer.rstrip()
        ...