![](/img/trans.png)
[英]What value does readline return when reaching the end of the file in Python?
[英]What does .readline() return in Python?
编辑整个帖子,以便更清楚地解决问题:
s = "GATATATGCATATACTT"
t = "ATAT"
for i in range(len(s)):
if t == s[i:i+len(t)]:
print i+1,
因此,上面程序的目的是扫描DNA的长线和DNA的短线(t),以找出t在s上的哪个位置匹配。 上面代码的输出是:
2 4 10#这基本上是与字符串t匹配的字符串s的索引号。 但从上面的代码中可以看出,i + 1给出基于1的编号输出。
我遇到的问题是,当我尝试更改代码时,为了使其通过文件接收s和t的值,readline()函数对我不起作用。 motif.txt文件包含两串DNA,每行一行。
with open('txt/motif.txt', 'r') as f:
s = f.readline()
t = f.readline()
for i in range(len(s)):
if t == s[i:i+len(t)]:
print i+1,
因此,另一方面,此代码将什么也不输出。 但是当我将t更改为:
t = f.readline().strip()
然后程序输出与第一个示例相同的结果。
所以我希望这可以使事情变得更清楚。 因此,我的问题是,如果readline()返回一个字符串,为什么示例2中的程序不能以与第一个示例相同的方式工作?
您的问题陈述是错误的,第一个示例中的s
或t
不可能拥有比第二个示例更多的内容(并且len(s) > 0
或len(t) > 0
)。
基本上有:
s = f.readline()
则s
将包含诸如"foobar \\n"
类的字符串,因此len(s)
将为9
。
然后加上:
s = f.readline().strip()
使用相同的字符串,则len(s)
将为6
因为剥离的字符串是"foobar"
。
因此,如果行中充满s = " \\n"
类s = " \\n"
空格,则s.strip()
将为空字符串""
,其中len(s) == 0
。
那样的话,您的循环就不会启动,也不会打印任何内容。
在我能想到的几乎所有其他情况下,应该提高执行力,而不是无声退出。
但老实说,您的代码很糟糕,因为没有人能读懂您想做什么(包括六个月内的您)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.