1

我有以下代码:

import os
from os.path import join, getsize

def main():
    directory = "\Surveys_I"
    for root, dirs, files in os.walk(directory):
       for i in dirs:
            if not i.find("Hey"):
                 print i

如果我使用上面的代码,我(违反直觉)会得到一个包含单词 Hey 的所有文件的列表。如果我做

if i.find("Hey") == -1我只得到不包含嘿的文件。

如果我做:

if i.find("Hey") == 1,我没有得到一个文件。

这是怎么回事?

4

3 回答 3

4

我除了所有其他正确的答案:

如果您只想在字符串是否包含(某处)另一个字符串时获得布尔结果,则可以使用in运算符:

if "hey" not in i:
    print i
于 2013-11-07T10:15:21.687 回答
3

str.find当未找到子字符串时返回 -1,否则返回索引。

>>> 'abcd'.find('c')
2
>>> 'abcd'.find('e')
-1
 # returns 1 because the first matching sub-string starts at the index 1
>>> "aheyqwert".find('hey')
1

帮助str.find

>>> help(str.find)
Help on method_descriptor:

find(...)
    S.find(sub [,start [,end]]) -> int

    Return the lowest index in S where substring sub is found,
    such that sub is contained within S[start:end].  Optional
    arguments start and end are interpreted as in slice notation.

    Return -1 on failure.
于 2013-11-07T10:11:26.593 回答
1

i指向当前目录名,它是一个字符串。在Hey文件名中找不到时find返回-1. 这就是为什么你会得到所有不包含Hey. i.find("Hey") == 1只会匹配名称以任何字符开头的文件,后跟Hey. 您可能没有任何此类文件。这就是为什么你什么都得不到。你可以像这样修复它

获取Hey名称中包含的所有文件

for i in dirs:
    if "Hey" in i:
      ...

获取名称中没有的所有文件Hey

for i in dirs:
    if "Hey" not in i:
      ...
于 2013-11-07T10:12:46.480 回答