`if file.find(' freq - ')!= -1`是什么意思?

时间:2016-01-05 14:49:06

标签: python string glob

我是一名化学专业的学生,​​他想编写一个脚本来从高斯输出文件中提取一些数据(如耦合常数和质子间距离)。

我找到了一个从高斯输出文件中提取化学位移的脚本。但是,我不明白脚本中if file.find('freq-') !=-1的含义。

这是脚本的一部分(因为脚本也做了其他事情,所以我只是播放了与我的问题相关的内容):

def read_gaussian_freq_outfiles(list_of_files):
    list_of_freq_outfiles = []
    for file in list_of_files:
        if file.find('freq-') !=-1:
            list_of_freq_outfiles.append([file,int(get_conf_number(file)),open(file,"r").readlines()])

    return list_of_freq_outfiles

def read_gaussian_outputfiles():
    list_of_files = []
    for file in glob.glob('*.out'):
        list_of_files.append(file)
    return list_of_files

我认为在def read_gaussian_outputfiles()位,我们会创建一个文件列表,只需添加所有带扩展名的文件' .out'到列表。

read_gaussian_freq_outfiles(list_of_files)位可能列出了包含" freq - "在文件名中。但是file.find('freq-')!=-1是什么意思?

是否意味着如果我们在文件名中找到的任何内容不等于-1或其他内容?

其他一些附加信息:高斯输出文件名的格式为:xxxx-opt_freq-conf-yyyy.out其中xxxx是分子的名称,yyyy是数字。

3 个答案:

答案 0 :(得分:2)

peek无法在s.find(foo)中找到foo时,它会返回s。因此,当-1未返回s.find(foo)时,我们知道它没有失败。

-1read_gaussian_freq_outfiles中的每个文件名中查找"freq-"这个词。如果成功在文件名中找到此短语,它会将包含此文件的列表,“conf number”(不确定这是什么)以及文件内容附加到名为{{1}的列表中}。

我创建了三个文件list_of_fileslist_of_freq_outfilesgoodbye.txt来演示用法。

在此示例中,我将打印以hello.txt结尾的所有文件,创建文件列表,然后打印文件名中包含短语helloworld.txt的所有文件。这应该只打印.txt

"goodbye"

确实,goodbye.txt是唯一打印的文件。

答案 1 :(得分:2)

正如其他答案所示:如果.find()检索-1,则无法找到您要查找的内容。这与.find将返回它可以找到您的查询的第一个索引这一事实有关。所以在下面的句子中

The cat is on the mat

和sentence.find('cat'),它将返回4(因为'cat'从索引4开始(它从0开始!))。

然而,如果找不到它,则sentence.find('dog')将返回唯一可以返回的内容:-1。如果它返回0作为'无法找到',您可能会认为您的查询从索引0开始。对于-1,您知道它无法找到它。

答案 2 :(得分:1)

python中的字符串查找方法查看给定字符串中出现的子字符串(ref http://www.tutorialspoint.com/python/string_find.htm

这里正在寻找带有' freq - '的所有文件名。其中包含子串。