Come risolvere '' str 'oggetto non ha alcun attributo 'leggere'' errore

voti
-1

Sto testando una funzione che dovrebbe convertire un JSON in testo normale.

Ho controllato le discussioni simili, ma la più rilevante che ho trovato ero problemi nella loro funzione reale. Io non sono affatto comodo con JSON, o Python è per questo, ma la mia ipotesi è che il problema risiede nel modo in cui io uso la funzione piuttosto che la funzione reale.

Il file JSON che ho creato e ho cercato sguardi conversione nel modo seguente:

person = {}

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

Questa è la funzione che sto 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

Per verificare questa corro

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

Test2 è il file JSON ho creato, e 'persona' è ciò che credo è un attributo.

Quando ho eseguito questo ottengo l'errore:

json_tmp = json.loads(json_file.read())
AttributeError: 'str' object has no attribute 'read'
È pubblicato 10/10/2019 alle 00:37
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

json_fileè un nome di file, non un file. È necessario aprire il file per leggerlo.

È inoltre possibile utilizzare json.load()al posto di json.loads(). Sarà leggere dal file stesso.

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)

Tuttavia, il file si mostra non è un file JSON corretta. Il file JSON dovrebbe essere simile a questo:

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

Quello che hai mostrato è uno script Python che definisce una variabile di nome person. Se si desidera leggere ed eseguire un altro script, è possibile utilizzare import.

Risposto il 10/10/2019 a 00:46
fonte dall'utente

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