我是一名化学专业的学生,他想编写一个脚本来从高斯输出文件中提取一些数据(如耦合常数和质子间距离)。
我找到了一个从高斯输出文件中提取化学位移的脚本。但是,我不明白脚本中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
是数字。
答案 0 :(得分:2)
当peek
无法在s.find(foo)
中找到foo
时,它会返回s
。因此,当-1
未返回s.find(foo)
时,我们知道它没有失败。
-1
在read_gaussian_freq_outfiles
中的每个文件名中查找"freq-"
这个词。如果成功在文件名中找到此短语,它会将包含此文件的列表,“conf number”(不确定这是什么)以及文件内容附加到名为{{1}的列表中}。
我创建了三个文件list_of_files
,list_of_freq_outfiles
和goodbye.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 - '的所有文件名。其中包含子串。