我正在使用具有行和列值的JSON文件,我需要根据这些值创建唯一ID。我们决定将值行和列组合在一起,并确保每个值由四位数字表示(每个都加1000)。
例如:
"Col_Row": "1 - 145"
必须与"Geo_ID": "10011145"
我想也许我可以用Python和正则表达式做到这一点,因为我必须搜索"Col_Row"
。
以下是我所拥有的:
output = re.sub(r'"Col_Row: "(.*?)",', r'\1', test);
output = output.split(' - ')
[1000+int(v) for v in output]
所以我可以获得这些值,但现在我不知道如何使用这些值搜索/替换非常大的JSON文件。
答案 0 :(得分:1)
使用此正则表达式(?<=\D|^)(\d{5,}|1[1-9]\d\d|1\d[1-9]\d|1\d\d[1-9]|[2-9]\d{3})(?=\D|$)
(?<=\D|^) symbols before digit
(\d{5,}|1[1-9]\d\d|1\d[1-9]\d|1\d\d[1-9]|[2-9]\d{3}) symbols > 1000
(?=\D|$) symbols after digit
答案 1 :(得分:0)
通过回调函数找到如何对正则表达式引用进行计算,如此问题所示:Python re.sub question
所以这里的python对我有用:
示例:
import re
test = '"Properties" : { "Col_Row": "1 - 145", ... "Col_Row": "130 - 240" ... }}'
def repl(m):
num = "%d%d" % (int(m.group(1))+1000,int(m.group(2))+1000)
string = '"Geo_ID": "%s", "Col_Row": "%s - %s",' % (num,m.group(1),m.group(2))
return string
output = re.sub(r'"Col_Row": "(.*?) - (.*?)",', repl, test)
输出:'"Properties" : { "Geo_ID": "10011145", "Col_Row": "1 - 145", ... "Geo_ID": "11301240", "Col_Row": "130 - 240" ... }}'
现在真实的东西(操纵文件):
input = open('fishnet.json','r')
input_list = input.readlines()
output = open('updated.json','w')
for line in input_list:
updated = re.sub(r'"Col_Row": "(.*?) - (.*?)",', repl, line)
output.write(updated)
output.close()
input.close()