Информация, которую вы ищете, не является информацией уровня AST.Подходящим уровнем для проверки подобных вещей является уровень токена, и вы можете использовать для этого модуль tokenize
.
API tokenize
довольно неудобен - ему нужен вводкоторый ведет себя как метод readline
двоичного файла-подобного объекта - поэтому вам нужно открывать файлы в двоичном режиме, и если у вас есть строка, вам нужно будет использовать encode
и io.BytesIO
для преобразования.
import tokenize
token_stream = tokenize.tokenize(input_file.readline)
for token in token_stream:
if token.type == tokenize.STRING:
do_whatever_with(token.string)
Вот версия Python 2 - имена функций разные, и вам необходимо получить доступ к информации о токене позиционно, потому что вместо именованных кортежей вы получаете регулярные кортежи:
import tokenize
token_stream = tokenize.generate_tokens(input_file.readline)
for token_type, token_string, _, _, _ in token_stream:
if token_type == tokenize.STRING:
do_whatever_with(token_string)