![](/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.