質問編集履歴

3

エラー内容の賦与

2022/04/03 04:59

投稿

H.K2
H.K2

スコア88

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

古いコードを間違えてあげてしまっていたので、現状時点のコードに修正した。

2022/04/03 04:57

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -25,13 +25,23 @@
25
25
  Path("db_settings_.json")
26
26
  )
27
27
 
28
- # write_loop_str =
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

ソースコードを追加しました。

2022/04/03 03:48

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -13,11 +13,48 @@
13
13
 
14
14
  ### 発生している問題・エラーメッセージ
15
15
 
16
- 上記を実現するためにスクリプトを書いたのですが、setting:{}
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
+