タイトルに記載されているとおり、私は次のように端末から実行できる単純なpyスクリプトを作成しようとしています:Python 2.7:値のJSONファイル検索を読み込み、置き換えて、新しいJSONとして保存します
- 負荷値が一致している場合は、ファイル
- が再帰的に特定の値またはサブ
- のためにそれらを検索すると(この部分はうまく動作します)現在の作業ディレクトリとネストされたフォルダ内のすべてのJSONファイルを探します、ユーザーによって新しい確立された値に置き換えてください。
- 終了したら、変更されたすべてのjsonファイルを現在のディレクトリの "変換済み"フォルダに保存します。
これは、問題は、私がかなり多くのPythonに慣れているので、私は以下の再帰的検索方法を試してみることです。この問題の助けに感謝します。私が使用しているjsonファイルまたは私が採用している検索方法。
問題を単純化すると、値iの検索はオブジェクト内のものと決して一致しません。それはキーかまったくの文字列値です。再帰的な検索を実行するために複数のメソッドを試しましたが、一致を得ることはできません。
たとえば、サンプルjsonを考慮に入れて、値 "selectable_parts"または "static_parts"を置き換えるか、構造体 "1h_mod310_door_00"の深さを置き換えたいのですが、私の検索方法がこの値に到達できないようです"オブジェクト[オブジェクト] [子供] [0] [子供] [5] [名前]"(これが助けて欲しい)
サンプルJSON:(https://drive.google.com/open?id=0B2-Bn2b0ujjVdW5YVGg3REg3OWs)
"""KEYWORD REPLACING MODULE."""
import os
import json
# functions
def get_files():
"""lists files"""
exclude = set(['.vscode', 'sample'])
json_files = []
for root, dirs, files in os.walk(os.getcwd(), topdown=True):
dirs[:] = [d for d in dirs if d not in exclude]
for name in files:
if name.endswith('.json'):
json_files.append(os.path.join(root, name))
return json_files
def load_files(json_files):
"""works files"""
for js_file in json_files:
with open(js_file) as json_file:
loaded_json = json.load(json_file)
replace_key_value(loaded_json, os.path.basename(js_file))
def write_file(data_file, new_file_name):
"""writes the file"""
if not os.path.exists('converted'):
os.makedirs('converted')
with open('converted/' + new_file_name, 'w') as json_file:
json.dump(data_file, json_file)
def replace_key_value(js_file, js_file_name):
"""replace and initiate save"""
recursive_replace(js_file, SKEY, '')
# write_file(js_file, js_file_name)
def recursive_replace(data, match, repl):
"""search for needed value and replace its value"""
for key, value in data.items():
if value == match:
print data[key]
print "AHHHHHHHH"
elif isinstance(value, dict):
recursive_replace(value, match, repl)
# main
print "\n" + '- on ' + os.getcwd()
NEW_DIR = raw_input('Work dir (leave empty if current): ')
if not NEW_DIR:
print NEW_DIR
NEW_DIR = os.getcwd()
else:
print NEW_DIR
os.chdir(NEW_DIR)
# get_files()
JS_FILES = get_files()
print '- files on ' + os.getcwd()
# print "\n".join(JS_FILES)
SKEY = raw_input('Value to search: ')
RKEY = raw_input('Replacement value: ')
load_files(JS_FILES)
あなたはいくつかの言葉を残したようです。問題は何ですか? – khelwood
問題を編集しますが、ロードされたjsonファイルからオブジェクトを検索して、その値が一致しない検索パラメータと一致するようにしてください。 オブジェクトをナビゲートして印刷することはできますが、値は検索するパラメータと決して一致しません。 – user1820904