-1

行と列の値を持つJSONファイルを使用しており、それらの値に基づいて一意のIDを作成する必要があります。行と列の値を組み合わせて、それぞれが4桁で表されるようにすることにしました(それぞれに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 に答える