Как сохранить сложный вложенный словарь в буфер обмена, а затем преуспеть - PullRequest
0 голосов
/ 28 июня 2018

У меня есть функция цикла, которая каждый раз возвращает сложный словарь, который можно упростить следующим образом:

d= {
  "key1":"A", "key2":"B", "cumulative score":0.1, "direct score":0.4, "depth":0, 
  "chain":[
{"key1":"A1", "key2":"B1", "cumulative score":0.2, "direct score":0.5, "depth":1, 
  "chain":[{"key1":"A11", "key2":"B11","cumulative score":0.3, "direct score":0.6, "depth":2, "chain":[]}, 
         {"key1":"A12", "key2":"B12","cumulative score":0.5, "direct score":0.7, "depth":2, "chain":[]}]
},
{"key1":"A2", "key2":"B2","cumulative score":0.1, "direct score":0.2,"depth":1,
  "chain":[None, 
         {"key1":"A22", "key2":"B22","cumulative score":0.1, "direct score":0.5, "depth":2, "chain":[]}]
}
    ]

}

Мой настоящий словарь может доходить до «глубины» = 10+ и может содержать намного больше данных. Так как мне нужно вручную проверить возвращаемое значение в Excel, я нахожу копирование окна вывода в буфер обмена, а затем в Excel можно создать четкий способ отображения данных следующим образом:

enter image description here

Так что я хочу добавить такую ​​функцию, чтобы сделать это в конце моей функции цикла. Я попробовал это

def add_to_clipboard(text):
import tempfile
with tempfile.NamedTemporaryFile("w") as fp:
    fp.write(text)
    fp.flush()
    command = "pbcopy < {}".format(fp.name)
    os.system(command)

У меня такой вопрос: я получил следующую ошибку, и я не знаю, как сохранить данные в буфер обмена, чтобы преуспеть. Кто-нибудь может помочь? Благодаря.

TypeError                                 Traceback (most recent call last)
<ipython-input-102-8afb2d14c221> in <module>()
----> 1 add_to_clipboard(result_test)

<ipython-input-101-89cb10853a94> in add_to_clipboard(text)
  2     import tempfile
  3     with tempfile.NamedTemporaryFile("w") as fp:
----> 4         fp.write(text)
  5         fp.flush()
  6         command = "pbcopy < {}".format(fp.name)

~\AppData\Local\Continuum\Miniconda3\envs\Battery\lib\tempfile.py in func_wrapper(*args, **kwargs)
481             @_functools.wraps(func)
482             def func_wrapper(*args, **kwargs):
--> 483                 return func(*args, **kwargs)
484             # Avoid closing the file as long as the wrapper is alive,
485             # see issue #18879.

TypeError: write() argument must be str, not dict

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Самый простой способ экспорта в формат, подобный Excel, - преобразовать ваш json в pandas фрейм данных и экспортировать его как csv. Затем вы можете открыть файл в электронной таблице

import pandas as pd

out_file = 'my_file.csv'
df = pd.DataFrame.from_dict(d, orient='index')
df.to_csv(out_file)
0 голосов
/ 28 июня 2018

Ошибка говорит о том, что в файл можно записывать только строковые объекты, здесь текстовая переменная - словарь. Главное это write () принимает только строковый объект. Таким образом, вы можете конвертировать ваш объект словаря в строку

import json
jsonStr = json.dumps(text)
print(type(jsonStr ))
fp.write(text)
...