Como corrigir '' str 'objeto não tem nenhum atributo 'ler'' erro

votos
-1

Estou testando uma função que é suposto para converter um json para texto simples.

Eu verifiquei tópicos semelhantes, mas o mais relevante que eu encontrei foi problemas em sua função real. Eu não sou nada confortável com JSON, ou Python para que o assunto, mas meu palpite é que o problema reside na forma como eu uso a função em vez da função real.

O arquivo json eu criei e tentou aparência convertendo os seguintes:

person = {}

person ['Name'] = {
    'name': 'Name',
    'adress': 'Somewhere',
    'phone_no': '0700000000',
    'email_id': None
}

Esta é a função que estou testando:

def json_to_plaintext(json_file, attribute):
    json_tmp = json.loads(json_file.read())
    attr = json_tmp[attribute]  # collect attribute
    txt_file = open(json_attribute.txt, w+)
    attr = str(attr)  # make string of object
    txt_file.write(attr)
    txt_file.close()

return txt_file

Para testar esta I run

plain_text.json_to_plaintext(r'C:\Desktop\Tests\test2', 'person')

Test2 é o JSON-arquivo que eu criei, e 'pessoa' é o que eu acredito é um atributo.

Quando eu executar este eu recebo o erro:

json_tmp = json.loads(json_file.read())
AttributeError: 'str' object has no attribute 'read'
Publicado 10/10/2019 em 00:37
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

json_fileé um nome de arquivo, não um arquivo. Você precisa abrir o arquivo, a fim de lê-lo.

Você também pode usar json.load()em vez de json.loads(). Ele irá ler a partir do próprio arquivo.

def json_to_plaintext(filename, attribute):
    with open(filename) as json_file:
        json_tmp = json.load(json_file)
    attr = json_tmp[attribute]  # collect attribute
    with open("json_attribute.txt", "w+") as txt_file:
        attr = str(attr)  # make string of object
        txt_file.write(attr)

No entanto, o arquivo que mostram não é um arquivo JSON adequada. O arquivo JSON deve ficar assim:

{ "person": {
    "name": "Name",
    "adress": "Somewhere",
    "phone_no": "0700000000",
    "email_id": null
    }
}

O que você mostrou é um script Python que define uma variável chamada person. Se você quiser ler e executar outro script, você pode usar import.

Respondeu 10/10/2019 em 00:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more