我使用Windws下的python程序cclib来处理一些驻留在子文件夹中的* .log文件,有时甚至是Z:\ dir1的子文件夹。 我已经通过DOS脚本的帮助将我的.py脚本复制到存在* .log文件的每个子文件夹中。
我想执行这个简单的.py脚本:
from cclib.io import ccopen
p = ccopen("*opt.NORMAL.log")
data = p.parse()
homo = data.homos[0] # assuming spin-restricted
lumo = homo + 1
homo_energy = data.moenergies[0][homo]
lumo_energy = data.moenergies[0][lumo]
print (homo_energy, lumo_energy)
然而,将执行此脚本的当前工作目录中的ccopen(所有与此相关的cclibs .py脚本位于我的C:\ py35文件夹中)引导到* .log文件并不能解决(AttributeError) :' NoneType'对象没有属性'解析')。 Ccopen似乎需要我的* .log的绝对路径,至少它可以在我粘贴时使用。 使用我的DOS脚本,我递归地传递包含* .log文件但名称不同的Z:\ dir1的每个子和子子。在每个目录中,我执行我的py脚本。如何告诉我的脚本中的ccopen模块处理当前工作目录中的* .log文件?
我想这个问题已被问过一千次,但我无法找到正确的解决方案。所以,抱歉重复并感谢您的帮助。
答案 0 :(得分:0)
你可以改变你的行
ccopen("*opt.NORMAL.log")
通过调用glob.glob
来解析文件名,并检查以防万一没有或多个文件与通配符模式匹配
files = glob.glob("*opt.NORMAL.log")
if len(files)==1:
p = ccopen(files[0])
else:
raise Exception("Expected 1 log file, found {}".format(len(files)))