Объект 'str' не имеет атрибута 'write' - PullRequest
0 голосов
/ 20 октября 2018

Получение печально известного 'str' object has no attribute 'write'.Здесь я не могу сказать, почему python считает мой файловый объект out_file строкой.Вероятно, что-то еще я пропускаюОшибка отмечена в закомментированной строке.

PS этот код предназначен для печати более удобной для чтения версии произвольного json.

import json
import os
json_path = os.path.normpath(r"my_dir")

#---------------------------------------------------------------------
def json_break(data, tab_str, out_file):
    k_str = tab_str
    if type(data) is list:
        i = 0
        for i in range(len(data)):
            json_break(data[i], tab_str + '  ', str(data[i]))
            i += 1
    elif type(data) is dict:
        for k in data:
            if type(data[k]) is str:
                k_str += k + ': ' + data[k]
                out_file.write(k_str)
            else:
                k_str += k + ':\n'
                out_file.write(k_str)  # 'str' object has no attribute 'write'
                json_break(data[k], tab_str + ' ', out_file)
    return None
#---------------------------------------------------------------------

with open(os.path.join(json_path,'my_json.json')) as in_file:
    data = json.load(in_file)

out_file = open(os.path.join(json_path,'print_json.txt'),"w") 

tab_str = ' '
json_break(data, tab_str, out_file)

out_file.close()

1 Ответ

0 голосов
/ 20 октября 2018

json_break() принимает последний аргумент как объект файла.Заменить

json_break(data[i], tab_str + '  ', str(data[i]))

на

json_break(data[i], tab_str + '  ', out_file)

И оно должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...