如何提取.py文件中一种类型的所有变量(字符串,整数……)?

问题描述 投票:0回答:2

我想过使用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' )

python gettext
2个回答
0
投票

使用os模块将目录更改为文件夹。然后从中导入本地字符串文件。

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

如果所有变量都是字符串,这将很有用。告诉这个技巧是否有效。


0
投票

[我在this tutorial,reddit上的tutorialr/kellyjonbrazil的帮助下找到了答案:

import ast

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


with open ('text.py', encoding = 'utf-8-sig') as f:
    parsed = ast.parse (f.read ())

MyVisitor ().visit (parsed)

如果要列出其他基本类型的变量:

  def visit_Import(self,node):
        ast.NodeVisitor.generic_visit(self, node)

    def visit_ImportFrom(self,node):
        ast.NodeVisitor.generic_visit(self, node)

    def visit_Assign(self,node):
        print('Node type: Assign and fields: ', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

    def visit_BinOp(self, node):
        print('Node type: BinOp and fields: ', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

    def visit_Expr(self, node):
        print('Node type: Expr and fields: ', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

    def visit_Num(self,node):
        print('Node type: Num and fields: ', node._fields)

    def visit_Name(self,node):
        print('Node type: Name and fields: ', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

    def visit_Str(self, node):
        print('Node type: Str and fields: ', node._fields)
© www.soinside.com 2019 - 2024. All rights reserved.