Как извлечь все переменные одного типа (string, int ...) в файл .py? - PullRequest
0 голосов
/ 12 апреля 2020

Я думал об использовании pygettext3 -d, но вы должны запустить его в cmd. Я не знаю, как я мог запустить его в своем коде.

И мне также нужно манипулировать строками, например, окружать строки _(), чтобы выполнить локализацию (так работает библиотека gettext).

Моя проблема похожа на:

def b (foo, bar):
    if foo:  
        print ('FOOBAR')
    elif bar:  
        print ('FOObar')
    else:
        print ('foobar')
        raise ValueError ('fooBAR')

Так что мне просто интересно, как извлечь строки типа 'FOOBAR' 'FOObar' 'foobar' 'fooBAR'. Чтобы сохранить их список и сделать что-то в исходной строке, например, окружите их _ (). Так 'FOObar' становится _('FOObar' )

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Я понял это с помощью этого урока , этого урока и r / kellyjonbrazil на reddit:

import ast

class MyVisitor (ast.NodeVisitor):
    def visit_Str (self, node):
        print ('String Node: ' + node.s)


class MyTransformer (ast.NodeTransformer):
    def visit_Str (self, node):
        return ast.Str (node.s)

# f could just be a string.
with open ('test.py', encoding = 'utf-8-sig') as f:
    parsed = ast.parse (f.read ())

# MyTransformer ().visit (parsed)
MyVisitor ().visit (parsed)

Для моего случая:

import ast

code = '''
def b (foo, bar):
    if foo:
        print ('FOOBAR')
    elif bar:
        print ('FOObar')
    else:
        print ('foobar')
        raise ValueError ('fooBAR')
'''


class MyVisitor (ast.NodeVisitor):
    def visit_Str (self, node):
        print ('String Node: ' + node.s)


parsed = ast.parse (code)

MyVisitor ().visit (parsed)

Вывод:

String Node: FOOBAR
String Node: FOObar
String Node: foobar
String Node: fooBAR
0 голосов
/ 12 апреля 2020

Используйте модуль os для смены каталога на папку. Затем импортируйте из него локальные строковые файлы.

import os
sys.chdir(directory_name)
from filename.locals import *

Это будет полезно, если все переменные являются строками. Скажите, работает ли этот трюк.

...