如何使用正则表达式搜索python值&引用&引用&引用;“字符串”&引用&引用&引用;字符串“';字符串';,(元组),[列表],{dict}

如何使用正则表达式搜索python值&引用&引用&引用;“字符串”&引用&引用&引用;字符串“';字符串';,(元组),[列表],{dict},python,regex,parsing,django-settings,Python,Regex,Parsing,Django Settings,我试图从Djangosettings.py文件中提取变量/值(保留注释、空格等),并使用Python以编程方式将它们移动或附加到另一个文件中。总的来说,我正在尝试自动地将设置模块分割成几个文件(而不是手动使用文本编辑器) 如何查找分配给此类文件中任何变量的值?-如果可能,以简洁的方式,例如使用正则表达式 变量/值示例: DEBUG = True TEMPLATE_DEBUG = DEBUG ALLOWED_HOSTS = [ '*' ] DATABASES = { 'defaul

我试图从Django
settings.py
文件中提取变量/值(保留注释、空格等),并使用Python以编程方式将它们移动或附加到另一个文件中。总的来说,我正在尝试自动地将设置模块分割成几个文件(而不是手动使用文本编辑器)

如何查找分配给此类文件中任何变量的值?-如果可能,以简洁的方式,例如使用正则表达式

变量/值示例:

DEBUG = True
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = [
    '*'
]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_PATH, 'database.sqlite'),
    }
}
SECRET_KEY = '#*ji*0hbpj6#4-0=$%bl(z+z)c=pd(rn^9u*1_96f^ba+4w58v'
LONG_STRING_VALUE = \
"""
bla foo bar baz ...
"""
A_TUPLE = (
    '...',
)
注意事项:

DEBUG = True
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = [
    '*'
]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_PATH, 'database.sqlite'),
    }
}
SECRET_KEY = '#*ji*0hbpj6#4-0=$%bl(z+z)c=pd(rn^9u*1_96f^ba+4w58v'
LONG_STRING_VALUE = \
"""
bla foo bar baz ...
"""
A_TUPLE = (
    '...',
)
  • 我将文件作为一个长字符串读取,因此正则表达式匹配可以跨越几行
  • 无需完全解析/理解该值,只需找到结束分隔符即可
  • 我想知道Python解释器的代码是否可用(作为Python模块),用于解析Python代码中的值。有人知道吗
  • 部分工作代码位于GitHub上:(自2014年2月15日起,在等号之前标识任何变量)


使用
django.conf.settings
模块,例如,您可以知道django是否处于调试模式或未键入:

from django.conf import settings

settings.DEBUG
...

医生

我不太明白。如果你说,让Django做解析,那不是我想要的:我会丢失注释和任何空白格式。(确认,我在上面的例子中遗漏了注释)@glglgl当然。忽略标题,StackOverflow只是很好地格式化它。它仍然是3个直引号字符。为什么你关心转置注释和保留格式?注释只关心人类的消费,人类可以(应该!)查看相应的源文件。因此,如果您试图将代码作为文本复制,而不是仅从各自的源文件中导入数据项,这也是一种气味……因此,从人工编辑的源文件复制到final settings.py,从人工编辑的源文件中提取final settings.py也不是一种气味。@CharlesDuffy不,让我解释一下,这不是一种气味。在我的项目中,设置模块应该是人类可消费的(尤其是),我希望在这个项目中,可能会向第一次使用Django的用户公开这个框架。这就是我关心格式和注释的原因之一。。。。在部署方面,我也关心人(这就是为什么我使用
settings.py
文件并将其拆分为部署配置文件)。我关心的是如何简化Django的升级(这就是为什么我不提供模板,而是复制/移动Django提供的原始
settings.py
文件的一部分)。毕竟,一般来说,源代码应该是人类可读的因此,我想知道是否不能重用Python解释器(源代码解析器)的内部工作。如果有可能的话,那可能是最干净的解决方案。