-1

我正在使用具有行和列值的 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 文件。

4

2 回答 2

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
于 2013-01-03T19:06:04.067 回答
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()
于 2013-01-03T20:19:12.147 回答