将datetime.date对象转换为字符串。

huangapple go评论182阅读模式
英文:

Convert datetime.date object into string

问题

对于每个符号,我有一个作为值的字典。它们本身也是字典。那些字典的每个键都是datetime.date对象。我必须将该字典转储到json文件中,但必须在此之前将其转换为"%Y-%d-%m"格式。我在Python中相当新。这对我来说很复杂。我该如何将这些对象更改为字符串?

英文:

For each symbol, I have a dictionary as value. They are themselves dictionaries. Each keys of those dictionaries are datetime.date objects. I have to dump that dictionary into json file, but it has to be converted into "%Y-%d-%m" format before. I am quite new in python. This is complicated for me. How can I changed those object into strings?

I know there are similar questions, e.g. https://stackoverflow.com/questions/59463224/dump-dictionary-with-datetime-key-to-json-file-generating-typeerror, but it did not help a lot.

Here is the full dictionary:

  1. {'ARBE': {datetime.date(2023, 2, 21): {'close_gte_next_day_open': False,
  2. 'fade_off_all_day': True,
  3. 'fade_off_morning': True,
  4. 'morning_high_price': 7.61,
  5. 'morning_high_time': datetime.time(10, 9),
  6. 'morning_low_price': 6.33,
  7. 'morning_low_time': datetime.time(11, 36),
  8. 'percentage_diff_close_next_day_open': 2.8124999999999956,
  9. 'percentage_diff_morning_high_morning_low': -16.81997371879107,
  10. 'percentage_diff_open_close': -1.990811638591116,
  11. 'percentage_diff_open_morning_high': 16.539050535987748,
  12. 'percentage_diff_open_next_day_open': 0.7656967840735042}},
  13. 'BAER': {datetime.date(2023, 2, 24): {'close_gte_next_day_open': True,
  14. 'fade_off_all_day': True,
  15. 'fade_off_morning': True,
  16. 'morning_high_price': 12.45,
  17. 'morning_high_time': datetime.time(9, 35),
  18. 'morning_low_price': 7.15,
  19. 'morning_low_time': datetime.time(10, 56),
  20. 'percentage_diff_close_next_day_open': -1.8987341772151944,
  21. 'percentage_diff_morning_high_morning_low': -42.57028112449799,
  22. 'percentage_diff_open_close': -21.155324011696955,
  23. 'percentage_diff_open_morning_high': 24.255217222072506,
  24. 'percentage_diff_open_next_day_open': -22.652374821601448}},
  25. 'CELZ': {datetime.date(2023, 2, 8): {'close_gte_next_day_open': True,
  26. 'fade_off_all_day': True,
  27. 'fade_off_morning': True,
  28. 'morning_high_price': 1.42,
  29. 'morning_high_time': datetime.time(9, 30),
  30. 'morning_low_price': 1.03,
  31. 'morning_low_time': datetime.time(11, 27),
  32. 'percentage_diff_close_next_day_open': -3.8557692307692326,
  33. 'percentage_diff_morning_high_morning_low': -27.464788732394364,
  34. 'percentage_diff_open_close': -24.087591240875916,
  35. 'percentage_diff_open_morning_high': 3.649635036496337,
  36. 'percentage_diff_open_next_day_open': -27.01459854014599}},
  37. 'HILS': {datetime.date(2023, 1, 31): {'close_gte_next_day_open': True,
  38. 'fade_off_all_day': True,
  39. 'fade_off_morning': False,
  40. 'morning_high_price': 1.8,
  41. 'morning_high_time': datetime.time(10, 2),
  42. 'morning_low_price': 1.28,
  43. 'morning_low_time': datetime.time(11, 46),
  44. 'percentage_diff_close_next_day_open': -18.333333333333332,
  45. 'percentage_diff_morning_high_morning_low': -28.888888888888893,
  46. 'percentage_diff_open_close': -3.2258064516129057,
  47. 'percentage_diff_open_morning_high': 45.16129032258065,
  48. 'percentage_diff_open_next_day_open': -20.967741935483872},
  49. datetime.date(2023, 2, 10): {'close_gte_next_day_open': False,
  50. 'fade_off_all_day': True,
  51. 'fade_off_morning': True,
  52. 'morning_high_price': 2.65,
  53. 'morning_high_time': datetime.time(9, 34),
  54. 'morning_low_price': 2.02,
  55. 'morning_low_time': datetime.time(11, 19),
  56. 'percentage_diff_close_next_day_open': 15.723270440251572,
  57. 'percentage_diff_morning_high_morning_low': -23.773584905660375,
  58. 'percentage_diff_open_close': -29.646017699115035,
  59. 'percentage_diff_open_morning_high': 17.2566371681416,
  60. 'percentage_diff_open_next_day_open': -18.584070796460168}},
  61. 'HSCS': {datetime.date(2023, 2, 3): {'close_gte_next_day_open': True,
  62. 'fade_off_all_day': False,
  63. 'fade_off_morning': True,
  64. 'morning_high_price': 3.1699,
  65. 'morning_high_time': datetime.time(9, 36),
  66. 'morning_low_price': 2.0901,
  67. 'morning_low_time': datetime.time(11, 7),
  68. 'percentage_diff_close_next_day_open': -13.823529411764698,
  69. 'percentage_diff_morning_high_morning_low': -34.06416606202088,
  70. 'percentage_diff_open_close': 29.277566539923956,
  71. 'percentage_diff_open_morning_high': 20.52851711026617,
  72. 'percentage_diff_open_next_day_open': 11.406844106463888}},
  73. 'KPRX': {datetime.date(2023, 2, 7): {'close_gte_next_day_open': False,
  74. 'fade_off_all_day': True,
  75. 'fade_off_morning': True,
  76. 'morning_high_price': 5.89,
  77. 'morning_high_time': datetime.time(9, 53),
  78. 'morning_low_price': 4.49,
  79. 'morning_low_time': datetime.time(12, 0),
  80. 'percentage_diff_close_next_day_open': 3.51648351648352,
  81. 'percentage_diff_morning_high_morning_low': -23.76910016977928,
  82. 'percentage_diff_open_close': -15.74074074074075,
  83. 'percentage_diff_open_morning_high': 9.07407407407406,
  84. 'percentage_diff_open_next_day_open': -12.777777777777786}},
  85. 'LLAP': {datetime.date(2023, 2, 22): {'close_gte_next_day_open': False,
  86. 'fade_off_all_day': False,
  87. 'fade_off_morning': False,
  88. 'morning_high_price': 3.39,
  89. 'morning_high_time': datetime.time(11, 46),
  90. 'morning_low_price': 3.03,
  91. 'morning_low_time': datetime.time(11, 56),
  92. 'percentage_diff_close_next_day_open': 6.484641638225254,
  93. 'percentage_diff_morning_high_morning_low': -10.619469026548682,
  94. 'percentage_diff_open_close': 0.0,
  95. 'percentage_diff_open_morning_high': 15.69965870307167,
  96. 'percentage_diff_open_next_day_open': 6.484641638225254}},
  97. 'MOB': {datetime.date(2023, 2, 21): {'close_gte_next_day_open': True,
  98. 'fade_off_all_day': True,
  99. 'fade_off_morning': True,
  100. 'morning_high_price': 2.73,
  101. 'morning_high_time': datetime.time(9, 30),
  102. 'morning_low_price': 2.1,
  103. 'morning_low_time': datetime.time(10, 16),
  104. 'percentage_diff_close_next_day_open': -5.479452054794526,
  105. 'percentage_diff_morning_high_morning_low': -23.076923076923073,
  106. 'percentage_diff_open_close': -16.41221374045802,
  107. 'percentage_diff_open_morning_high': 4.198473282442743,
  108. 'percentage_diff_open_next_day_open': -20.99236641221375}},
  109. 'RNAZ': {datetime.date(2023, 2, 15): {'close_gte_next_day_open': True,
  110. 'fade_off_all_day': True,
  111. 'fade_off_morning': True,
  112. 'morning_high_price': 0.91,
  113. 'morning_high_time': datetime.time(9, 30),
  114. 'morning_low_price': 0.7016,
  115. 'morning_low_time': datetime.time(10, 30),
  116. 'percentage_diff_close_next_day_open': -21.328358208955226,
  117. 'percentage_diff_morning_high_morning_low': -22.901098901098905,
  118. 'percentage_diff_open_close': -25.348189415041777,
  119. 'percentage_diff_open_morning_high': 1.3927576601671383,
  120. 'percentage_diff_open_next_day_open': -41.27019498607242}},
  121. 'SECO': {datetime.date(2023, 2, 6): {'close_gte_next_day_open': True,
  122. 'fade_off_all_day': True,
  123. 'fade_off_morning': True,
  124. 'morning_high_price': 5.03,
  125. 'morning_high_time': datetime.time(10, 28),
  126. 'morning_low_price': 3.37,
  127. 'morning_low_time': datetime.time(11, 52),
  128. 'percentage_diff_close_next_day_open': -12.73209549071618,
  129. 'percentage_diff_morning_high_morning_low': -33.00198807157058,
  130. 'percentage_diff_open_close': -1.8229166666666625,
  131. 'percentage_diff_open_morning_high': 30.989583333333343,
  132. 'percentage_diff_open_next_day_open': -14.322916666666663}},
  133. 'SQL': {datetime.date(2023, 2, 7): {'close_gte_next_day_open': True,
  134. 'fade_off_all_day': True,
  135. 'fade_off_morning': True,
  136. 'morning_high_price': 2.4,
  137. 'morning_high_time': datetime.time(9, 41),
  138. 'morning_low_price': 1.55,
  139. 'morning_low_time': datetime.time(11, 55),
  140. 'percentage_diff_close_next_day_open': -14.935064935064934,
  141. 'percentage_diff_morning_high_morning_low': -35.416666666666664,
  142. 'percentage_diff_open_close': -23.0,
  143. 'percentage_diff_open_morning_high': 19.999999999999996,
  144. 'percentage_diff_open_next_day_open': -34.5},
  145. datetime.date(2023, 2, 10): {'close_gte_next_day_open': True,
  146. 'fade_off_all_day': True,
  147. 'fade_off_morning': True,
  148. 'morning_high_price': 2.16,
  149. 'morning_high_time': datetime.time(9, 37),
  150. 'morning_low_price': 1.66,
  151. 'morning_low_time': datetime.time(10, 30),
  152. 'percentage_diff_close_next_day_open': -24.909090909090914,
  153. 'percentage_diff_morning_high_morning_low': -23.148148148148156,
  154. 'percentage_diff_open_close': -34.32835820895521,
  155. 'percentage_diff_open_morning_high': 7.462686567164198,
  156. 'percentage_diff_open_next_day_open': -50.686567164179095}},
  157. 'TNON': {datetime.date(2023, 2, 15): {'close_gte_next_day_open': True,
  158. 'fade_off_all_day': False,
  159. 'fade_off_morning': True,
  160. 'morning_high_price': 1.67,
  161. 'morning_high_time': datetime.time(9, 31),
  162. 'morning_low_price': 1.25,
  163. 'morning_low_time': datetime.time(10, 0),
  164. 'percentage_diff_close_next_day_open': -12.844036697247718,
  165. 'percentage_diff_morning_high_morning_low': -25.149700598802394,
  166. 'percentage_diff_open_close': 37.106918238993714,
  167. 'percentage_diff_open_morning_high': 5.031446540880494,
  168. 'percentage_diff_open_next_day_open': 19.496855345911936}},
  169. 'VCNX': {datetime.date(2023, 2, 7): {'close_gte_next_day_open': True,
  170. 'fade_off_all_day': True,
  171. 'fade_off_morning': True,
  172. 'morning_high_price': 0.824,
  173. 'morning_high_time': datetime.time(9, 30),
  174. 'morning_low_price': 0.62,
  175. 'morning_low_time': datetime.time(11, 12),
  176. 'percentage_diff_close_next_day_open': -9.375000000000009,
  177. 'percentage_diff_morning_high_morning_low': -24.757281553398055,
  178. 'percentage_diff_open_close': -22.330097087378633,
  179. 'percentage_diff_open_morning_high': 0.0,
  180. 'percentage_diff_open_next_day_open': -29.611650485436897}},
  181. 'WLDS': {datetime.date(2023, 2, 9): {'close_gte_next_day_open': True,
  182. 'fade_off_all_day': True,
  183. 'fade_off_morning': True,
  184. 'morning_high_price': 1.29,
  185. 'morning_high_time': datetime.time(9, 31),
  186. 'morning_low_price': 0.8823,
  187. 'morning_low_time': datetime.time(10, 8),
  188. 'percentage_diff_close_next_day_open': -8.791208791208799,
  189. 'percentage_diff_morning_high_morning_low': -31.604651162790702,
  190. 'percentage_diff_open_close': -18.750000000000007,
  191. 'percentage_diff_open_morning_high': 15.178571428571422,
  192. 'percentage_diff_open_next_day_open': -25.89285714285715}}}

答案1

得分: 1

  1. {
  2. "HSCS": {
  3. "2023-02-03": {
  4. "close_gte_next_day_open": true,
  5. "fade_off_all_day": false,
  6. "fade_off_morning": true,
  7. "morning_high_price": 3.1699,
  8. "morning_high_time": "09:36:00",
  9. "morning_low_price": 2.0901,
  10. "morning_low_time": "11:07:00"
  11. }
  12. }
  13. }
英文:

The default= argument to json.dumps doesn't do anything for object keys, so we'll need to do that ourselves.

Happily, though, we can use a function with the same signature as default expects to transform keys, we'll just have to write a recursive function for walking a dict and applying it to the keys:

  1. import datetime
  2. import json
  3. data = {
  4. "HSCS": {
  5. datetime.date(2023, 2, 3): {
  6. "close_gte_next_day_open": True,
  7. "fade_off_all_day": False,
  8. "fade_off_morning": True,
  9. "morning_high_price": 3.1699,
  10. "morning_high_time": datetime.time(9, 36),
  11. "morning_low_price": 2.0901,
  12. "morning_low_time": datetime.time(11, 7),
  13. },
  14. },
  15. }
  16. def recursive_key_transform(value, key_transform):
  17. if isinstance(value, dict):
  18. return {
  19. key_transform(k): recursive_key_transform(
  20. v, key_transform
  21. )
  22. for k, v in value.items()
  23. }
  24. if isinstance(value, list):
  25. return [
  26. recursive_key_transform(v, key_transform)
  27. for v in value
  28. ]
  29. return value
  30. def transform(value):
  31. if isinstance(value, (datetime.date, datetime.time)):
  32. return value.isoformat()
  33. return value
  34. print(
  35. json.dumps(
  36. recursive_key_transform(data, transform),
  37. indent=4,
  38. sort_keys=True,
  39. default=transform,
  40. )
  41. )

prints out

  1. {
  2. "HSCS": {
  3. "2023-02-03": {
  4. "close_gte_next_day_open": true,
  5. "fade_off_all_day": false,
  6. "fade_off_morning": true,
  7. "morning_high_price": 3.1699,
  8. "morning_high_time": "09:36:00",
  9. "morning_low_price": 2.0901,
  10. "morning_low_time": "11:07:00"
  11. }
  12. }
  13. }

huangapple
  • 本文由 发表于 2023年3月3日 22:43:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/75628489.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定