Jak opravit ‚‘ str ‚objekt nemá atribut‚číst‘‘ Chyba

hlasů
-1

Zkouším funkci, která se má převést JSON na prostý text.

Zkontroloval jsem podobné téma, ale nejdůležitější jsem našel byl problémy v jejich skutečné funkce. Nejsem vůbec spokojeni s JSON, nebo Python když na to přijde, ale já si myslím, že problém spočívá v tom, jak se používá funkce, spíše než skutečné funkce.

JSON-file jsem vytvořil a zkoušel konverze vypadá takto:

person = {}

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

Jedná se o funkci jsem testování:

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

Pro testování této běhám

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

„Test2“ je json-file jsem vytvořil, a ‚člověk‘ je to, co věřím, je atribut.

Když spustím to dostanu chybu:

json_tmp = json.loads(json_file.read())
AttributeError: 'str' object has no attribute 'read'
Položena 10/10/2019 v 00:37
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

json_fileje název souboru, nikoli soubor. Musíte otevřít soubor, aby ji přečíst.

Můžete také použít json.load()místo json.loads(). Bude číst ze souboru sám.

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)

Nicméně, soubor, který ukáže, není správným JSON souboru. Soubor JSON by měl vypadat takto:

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

Co jste ukázal je Python skript, který definuje proměnnou s názvem person. Chcete-li číst a spouštět jiný skript, můžete použít import.

Odpovězeno 10/10/2019 v 00:46
zdroj uživatelem

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