使用Python中的str.replace()删除函数包装器

时间:2017-08-07 10:46:17

标签: python json regex string

我在JSON文件中有一些烦人的元素,如:

"DateTime" : Date(-62135596800000),
    "ReceivedDateTime" : Date(-62135596800000)

使用json.Load()对此进行序列化会导致错误,因为无法识别Date()。

Traceback (most recent call last):
  File "json_parse.py", line 10, in <module>
    data = json.load(data_file)
  File "C:\Python27\lib\json\__init__.py", line 291, in load
    **kw)
  File "C:\Python27\lib\json\__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

所以最简单的方法是在序列化之前删除Date()包装器。之后我可以转换为正确的日期时间。

我可以用str.replace做简单的事情,例如:

data.replace("Date(","")

但显然我没有删除尾随括号。

我该怎么做呢?

干杯。

2 个答案:

答案 0 :(得分:1)

我为你写了这段代码,它应该解决问题。

a = '''"DateTime" : Date(-62135596800000),
    "ReceivedDateTime" : Date(-62135596800000)'''


while "Date(" in a: a = (a[:a.index("Date(")+len("Date(")+a[a.index("Date(")+len("Date("):].index(")")] + a[a.index("Date(")+len("Date(")+a[a.index("Date(")+len("Date("):].index(")")+1:]).replace("Date(", "", 1)

答案 1 :(得分:1)

更可读的方法是使用re库并创建正则表达式:

import re

text = '''"DateTime" : Date(-62135596800000),
    "ReceivedDateTime" : Date(-62135596800000)'''

pattern = re.compile("Date\((.+)\)")
x = pattern.findall(text)

text2 = text

for i in x:
    text2 = text2.replace("Date("+i+")", i)