2012-07-12 41 views
2

我試圖在控制檯中打印文件名'xyz.0.html'。它吐出錯誤"substring not found"python index()不起作用

目錄中的文件:

xyz.0.html 
xyz.1.html 
xyz.2.html 

蟒蛇

for name in glob.glob('*html'): 
    if name.index('.0.html'): 
    print name 

回答

2

你可能想

if '.0.html' in name: 

或者,如果子不是字符串中

if name.endswith('.0.html'): 

你的版本會引發錯誤(如果子是在一開始就計算爲False因爲index方法返回找到子字符串的字符串中的索引(或者如果找不到子字符串,則會引發異常)。

+0

燁奏效。謝謝:) – dbs 2012-07-12 18:06:50

2

嘗試

if ".0.html" in name: 
    print name 

if name.endswith(".0.html"): 
     print name 
5

爲什麼不使用str.endswith()

>>> "xyz.0.html".endswith(".0.html") 
True 
2

錯誤正是它所說的。當您在名稱"xyz.1.html"上致電name.index('0.html')時,未找到該字符串。 index在這種情況下引發錯誤。如果你不想要這個,你可以使用find方法(如果沒有找到子字符串,則返回-1),或者你可以捕獲異常。

+0

+1 - 這是一個很好的原因,其他答案只是告訴你其他(更好)的方式,而不是爲什麼問題的版本是錯誤的。 – 2012-07-12 18:08:20

0

你可以使用Python的發電機

print [name for name in glob.glob('*html') if name.endswith(".0.html")] 
+1

只是挑剔,這是一個列表理解,而不是發電機。此外,該名稱作爲列表打印,與可能或不重要的名稱的垂直列進行比較。 – mgilson 2012-07-12 18:47:41

+0

@ mgilson謝謝,但它的行爲像生成器,它創建一個列表,這個代碼有什麼問題? – Pooya 2012-07-12 18:51:26