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