想象一下这样的字符串:
field1,field2(subfield1),field3(subfield2,subfield3),field4(),field5(subfield4(subsubfield,subsubfield2))
Run Code Online (Sandbox Code Playgroud)
我想得到一个像这样的数组:
array(
field1 => array(),
field2 => array(subfield1),
field3 => array(
subfield2,
subfield3
),
field4 => array(),
field5 => array(
subfield4 => array(
subsubfield => array(),
subsubfield => array()
)
)
)
Run Code Online (Sandbox Code Playgroud)
我有这个正则表达式[a-zA-Z0-9]*\([^()]*(?:(?R)[^()]*)*\),它执行一些输出工作:
array(
field1,
field2(subfield1),
field3(subfield2,subfield3),
field4(),
field5(subfield4(subsubfield,subsubfield2))
)
Run Code Online (Sandbox Code Playgroud)
虽然这不是我想要的。我现在有点陷入困境,但到目前为止我提出的选择是:
不管怎样,我必须循环遍历字段和子字段。我有一些代码使用给定的正则表达式,并在稍后需要时对其值运行相同的匹配。我想立即解析整个字符串,包括其嵌套子字符串。
有谁知道我如何开始做这件事?哪个选项是最好(或更好)的方法?(可读性 vs 资源使用 vs 复杂性 vs 等)
我在Python中使用JSON编码时出现问题,特别是使用decimal.Decimal值.我正在使用它为Google App Engine应用程序输出JSON.
为了绕过jsonPython中的默认模块的异常,告诉我它无法处理decimal.Decimal对象,我正在使用这个编码器子类:
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
return super(DecimalEncoder, self).default(o)
Run Code Online (Sandbox Code Playgroud)
在其他应用程序上,这确实有效.在这种情况下,它没有.经过多次挫折后,我发现这给出了奇怪的结果:
print id(decimal.Decimal)
print id(type(o))
Run Code Online (Sandbox Code Playgroud)
人们会期望id是相同的,因为同一个类对象在内存中只驻留一次是有意义的.因为id的不同,isinstance()不起作用.
可能是十进制.Decimal已经导入其他地方,例如在App Engine和/或webapp2包中?
以下模块重现了我的系统上的错误(OSx 10.10,Python 2.7.6,GAE SDK 1.9.20).只需创建一个GAE应用程序并将其放在main.py中:
import webapp2, decimal, json, MySQLdb, sys
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
print id(decimal.Decimal)
print id(type(o))
if isinstance(o, decimal.Decimal):
return float(o)
return super(DecimalEncoder, self).default(o)
class MainHandler(webapp2.RequestHandler):
def get(self):
db = MySQLdb.connect(unix_socket='/var/mysql/mysql.sock', host='localhost', user='root', db='ssss', charset='utf8')
cursor = db.cursor(MySQLdb.cursors.DictCursor)
cursor.execute("SELECT id, price FROM product WHERE id = 1") …Run Code Online (Sandbox Code Playgroud) 我正在使用PyAPNS从Python连接到APN.当作为独立脚本运行时,一切正常并且推送消息得以传递.在Google App Engine开发环境中运行时,出现以下错误:
Traceback (most recent call last):
File "/usr/local/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/usr/local/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/usr/local/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/usr/local/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/usr/local/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/usr/local/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/mnt/dev/OmegaHandler.py", line 173, in apns
apns.gateway_server.send_notification("70f23022d76aae0176844087c97f0ff068dd3e3686dbac086b8f82a630d0196a", payload)
File "/mnt/dev/apns.py", line 544, in send_notification …Run Code Online (Sandbox Code Playgroud)