私は単純なデータファイルフォーマットを設定しようとしています。これらのファイルをPythonで解析しています。フォーマットは、基本的にヘッダー情報とそれに続くデータで構成されます。構文と将来の拡張性の理由から、ヘッダー情報にJSONオブジェクトを使用したいと考えています。ファイルの例は次のようになります。データファイル内のjsonオブジェクトを解析する最適なメソッド
{
"name": "my material",
"sample-id": null,
"description": "some material",
"funit": "MHz",
"filetype": "material_data"
}
18 6.269311533 0.128658208 0.962033017 0.566268827
18.10945274 6.268810641 0.128691962 0.961950095 0.565591807
18.21890547 6.268312637 0.128725463 0.961814928 0.564998228...
データの長さと構造が常に同じ場合、これは解析するのが難しくありません。しかし、JSONオブジェクトを解析する最も柔軟な方法、未知数の行、ネストされた中括弧の数が不明で、ファイル内に複数のJSONオブジェクトがある可能性があります。
唯一のJSONオブジェクトがファイル内に存在する場合、1は、この正規表現を使用することができます:私は、そこに複数のJSON文字列がある、と私は最初のものをつかむしたい場合は、しかし、
with open(fname, 'r') as fp:
fstring = fp.read()
json_string = re.search('{.*}', fstring, flags=re.S)
を
def grab_json(mystring):
lbracket = 0
rbracket = 0
lbracket_pos = 0
rbracket_pos = 0
for i in range(len(mystring)):
if mystring[i] == '{':
lbracket = 1
lbracket_pos = i
break
for i in range(lbracket_pos+1, len(mystring)):
if mystring[i] == '}':
rbracket += 1
if rbracket == lbracket:
rbracket_pos = i
break
elif mystring[i] == '{':
lbracket += 1
json_string = mystring[lbracket_pos : rbracket_pos + 1]
return json_string, lbracket_pos, rbracket_pos
json_string, beg_pos, end_pos = grab_json(fstring)
私はいつものように質問しています:これを行うには良い方法がありますか?よりシンプルなコード、より柔軟なコード、より堅牢なコード、または本当に何かを意味するか?
を使用してあなたの代わりにあなたが分散クラスタ(複数可)上のデータを処理したい場合は特にApache Parquet Formatを見てみたいことがあり、複数のデータファイル
に同じヘッダファイルを使用する可能性をあげますすべてのデータにJSONを使用し、ファイルごとに1つのJSON構造を使用します。 –