2012-07-12 278 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