質問編集履歴
3
エラー内容の賦与
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,6 +15,54 @@
|
|
15
15
|
|
16
16
|
上記を実現するために下記のようなスクリプトを書いたのですが、
|
17
17
|
jsonの入れ子構造が再現できず困っています。
|
18
|
+
ループ内の文字列が、図のようなフォーマットとならず、json出力すると、下記エラーが出てしまいます。
|
19
|
+
|
20
|
+
### エラー内容
|
21
|
+
TypeError Traceback (most recent call last)
|
22
|
+
~\AppData\Local\Temp/ipykernel_17528/3905920474.py in <module>
|
23
|
+
1 df = pd.read_excel("test.xlsx")
|
24
|
+
----> 2 write_json_param(df)
|
25
|
+
|
26
|
+
~\AppData\Local\Temp/ipykernel_17528/2183125372.py in write_json_param(tmp_df)
|
27
|
+
28 # with open(write_filename, "w") as f:
|
28
|
+
29 with open(write_filename, "w", encoding="CP932") as f:
|
29
|
+
---> 30 json.dump(write_str, f, ensure_ascii=False)
|
30
|
+
|
31
|
+
~\AppData\Local\Programs\Python\Python39\lib\json\__init__.py in dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
|
32
|
+
177 # could accelerate with writelines in some versions of Python, at
|
33
|
+
178 # a debuggability cost
|
34
|
+
--> 179 for chunk in iterable:
|
35
|
+
180 fp.write(chunk)
|
36
|
+
181
|
37
|
+
|
38
|
+
~\AppData\Local\Programs\Python\Python39\lib\json\encoder.py in _iterencode(o, _current_indent_level)
|
39
|
+
429 yield from _iterencode_list(o, _current_indent_level)
|
40
|
+
430 elif isinstance(o, dict):
|
41
|
+
--> 431 yield from _iterencode_dict(o, _current_indent_level)
|
42
|
+
432 else:
|
43
|
+
433 if markers is not None:
|
44
|
+
|
45
|
+
~\AppData\Local\Programs\Python\Python39\lib\json\encoder.py in _iterencode_dict(dct, _current_indent_level)
|
46
|
+
403 else:
|
47
|
+
404 chunks = _iterencode(value, _current_indent_level)
|
48
|
+
--> 405 yield from chunks
|
49
|
+
406 if newline_indent is not None:
|
50
|
+
407 _current_indent_level -= 1
|
51
|
+
|
52
|
+
~\AppData\Local\Programs\Python\Python39\lib\json\encoder.py in _iterencode(o, _current_indent_level)
|
53
|
+
436 raise ValueError("Circular reference detected")
|
54
|
+
437 markers[markerid] = o
|
55
|
+
--> 438 o = _default(o)
|
56
|
+
439 yield from _iterencode(o, _current_indent_level)
|
57
|
+
440 if markers is not None:
|
58
|
+
|
59
|
+
~\AppData\Local\Programs\Python\Python39\lib\json\encoder.py in default(self, o)
|
60
|
+
177
|
61
|
+
178 """
|
62
|
+
--> 179 raise TypeError(f'Object of type {o.__class__.__name__} '
|
63
|
+
180 f'is not JSON serializable')
|
64
|
+
181
|
65
|
+
TypeError: Object of type set is not JSON serializable
|
18
66
|
|
19
67
|
### ソースコード
|
20
68
|
```python3
|
2
古いコードを間違えてあげてしまっていたので、現状時点のコードに修正した。
test
CHANGED
File without changes
|
test
CHANGED
@@ -25,13 +25,23 @@
|
|
25
25
|
Path("db_settings_.json")
|
26
26
|
)
|
27
27
|
|
28
|
-
|
28
|
+
str_loop = ""
|
29
|
+
for row in df.itertuples():
|
30
|
+
print(row[1], row[2], row[3], row[4], row[5])
|
31
|
+
tmp_str = (f"{row[1]}" + ":{" +
|
32
|
+
"x:" + f"[{row[2]}]" + "," +
|
33
|
+
"x1:" + f"[{row[3]}]" + "," +
|
34
|
+
"y1:" + f"[{row[4]}]" + "," +
|
35
|
+
"y2:" + f"[{row[5]}]" +
|
29
36
|
|
37
|
+
"}")
|
38
|
+
str_loop = str_loop + tmp_str + ','
|
39
|
+
|
30
|
-
write_loop_str = '"proc_setting":{}'
|
40
|
+
write_loop_str = f'"proc_setting":{str_loop}'
|
31
41
|
write_str = {
|
32
42
|
"label_list": tmp_df["label"].tolist(),
|
33
43
|
"setting":{
|
34
|
-
|
44
|
+
write_loop_str
|
35
45
|
}
|
36
46
|
# write_loop_str
|
37
47
|
}
|
@@ -39,17 +49,9 @@
|
|
39
49
|
with open(write_filename, "w", encoding="CP932") as f:
|
40
50
|
json.dump(write_str, f, ensure_ascii=False)
|
41
51
|
|
52
|
+
# main処理
|
42
53
|
df = pd.read_excel("test.xlsx")
|
43
54
|
write_json_param(df)
|
44
|
-
|
45
|
-
for row in df.itertuples():
|
46
|
-
# print(row[0], row[1], row[2], row[3], row[4])
|
47
|
-
str_loop = """f"{row[0]}":{
|
48
|
-
"x":[f"{row[1]}"]
|
49
|
-
|
50
|
-
}"""
|
51
|
-
|
52
|
-
print(str_loop)
|
53
55
|
|
54
56
|
```
|
55
57
|
|
1
ソースコードを追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -13,11 +13,48 @@
|
|
13
13
|
|
14
14
|
### 発生している問題・エラーメッセージ
|
15
15
|
|
16
|
-
上記を実現するためにスクリプトを書いたのですが、
|
16
|
+
上記を実現するために下記のようなスクリプトを書いたのですが、
|
17
|
-
の
|
17
|
+
jsonの入れ子構造が再現できず困っています。
|
18
|
-
ソースコードは後日載せたいと考えておりますが、先行して質問だけ出させてください。
|
19
18
|
|
19
|
+
### ソースコード
|
20
|
+
```python3
|
21
|
+
def write_json_param(tmp_df):
|
22
|
+
# jsonのパラメータ書込み部
|
23
|
+
write_filename = (
|
24
|
+
# Path(const.MyConst.SETTING_PATH) / f"{sel_schema}_{sel_proc}.json"
|
25
|
+
Path("db_settings_.json")
|
26
|
+
)
|
27
|
+
|
28
|
+
# write_loop_str =
|
29
|
+
|
30
|
+
write_loop_str = '"proc_setting":{}'
|
31
|
+
write_str = {
|
32
|
+
"label_list": tmp_df["label"].tolist(),
|
33
|
+
"setting":{
|
34
|
+
|
35
|
+
}
|
36
|
+
# write_loop_str
|
37
|
+
}
|
38
|
+
# with open(write_filename, "w") as f:
|
39
|
+
with open(write_filename, "w", encoding="CP932") as f:
|
40
|
+
json.dump(write_str, f, ensure_ascii=False)
|
41
|
+
|
42
|
+
df = pd.read_excel("test.xlsx")
|
43
|
+
write_json_param(df)
|
44
|
+
|
45
|
+
for row in df.itertuples():
|
46
|
+
# print(row[0], row[1], row[2], row[3], row[4])
|
47
|
+
str_loop = """f"{row[0]}":{
|
48
|
+
"x":[f"{row[1]}"]
|
49
|
+
|
50
|
+
}"""
|
51
|
+
|
52
|
+
print(str_loop)
|
53
|
+
|
54
|
+
```
|
20
55
|
|
21
56
|
### 補足情報(FW/ツールのバージョンなど)
|
22
57
|
|
23
58
|
Python 3.9.6
|
59
|
+
|
60
|
+
|