Я собирался предложить модуль compiler
, но он игнорирует комментарии:
f.py:
# For Translators: some useful info about the sentence below
_("Some string blah blah")
.. и модуль компилятора:
>>> import compiler
>>> m = compiler.parseFile("f.py")
>>> m
Module(None, Stmt([Discard(CallFunc(Name('_'), [Const('Some string blah blah')], None, None))]))
Модуль AST в Python 2.6, похоже, делает то же самое.
Не уверен, если это возможно, но если вместо этого вы используете строки в тройных кавычках ..
"""For Translators: some useful info about the sentence below"""
_("Some string blah blah")
.. вы можете надежно проанализировать файл Python с помощью модуля компилятора:
>>> m = compiler.parseFile("f.py")
>>> m
Module('For Translators: some useful info about the sentence below', Stmt([Discard(CallFunc(Name('_'), [Const('Some string blah blah')], None, None))]))
Я попытался написать сценарий с полным режимом для извлечения строк документации - он неполный, но, кажется, захватывает большинство строк документации: http://pastie.org/446156 (или на github.com / dbr / so_scripts )
Другой, гораздо более простой вариант - использовать регулярные выражения, например:
f = """# For Translators: some useful info about the sentence below
_("Some string blah blah")
""".split("\n")
import re
for i, line in enumerate(f):
m = re.findall("\S*# (For Translators: .*)$", line)
if len(m) > 0 and i != len(f):
print "Line Number:", i+1
print "Message:", m
print "Line:", f[i + 1]
.. выход:
Line Number: 1
Message: ['For Translators: some useful info about the sentence below']
Line: _("Some string blah blah")
Не уверен, как генерируется файл .pot
, поэтому я ничем не могу помочь с этой частью ..