2017-02-02 6 views
1

Я использую программу cclib для python под Windws для обработки некоторых файлов * .log, которые находятся во вложенных папках, а иногда и в подзаголовках Z: \ dir1. Я скопировал свой .py скрипт в каждую подпапку, где файл * .log существует с помощью сценария DOS.Получить абсолютный путь к файлу определенного типа файла в CWD

Там я хочу, чтобы выполнить этот простой .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» не имеет атрибута «parse»). Ccopen, кажется, требует абсолютного пути к моему * .log, по крайней мере, он работает, если я вставляю его. С моим сценарием DOS я рекурсивно передаю через каждый sub и subsub Z: \ dir1, содержащий файл * .log, но с другое название. В каждом из этих каталогов я выполняю свой скрипт py. Как сообщить модулю ccopen в моем скрипте обрабатывать файл * .log в текущем рабочем каталоге?

Я думаю, что этот вопрос задавался тысячу раз, но я просто не мог найти правильное решение. Итак, извините за дублирование и спасибо за помощь. не

ответ

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))) 
+0

Спасибо вы! Но я, кажется, неправильно понял или что-то в этом роде. Не могли бы вы рассказать мне, как это исправить? – Marvin

+0

Я получаю сообщение об ошибке Файл «homolumoscript.py», строка 29 ^^ SyntaxError: неожиданный EOF при разборе – Marvin

+0

извините, скобки отсутствуют. Исправлена. –