Jak naprawić „” str „obiekt ma atrybut«czytać»” błąd

głosy
-1

Ja testuje funkcję, która ma przekształcić JSON do zwykłego tekstu.

Sprawdziłem podobne tematy, ale najbardziej istotne znalazłem problemy w ich aktualnej funkcji. Nie jestem w ogóle wygodne z JSON, lub Python dla tej sprawy, ale wydaje mi się, że problem leży w tym, jak korzystać z funkcji zamiast rzeczywistej funkcji.

JSON plik został utworzony i próbował konwersji wygląda następująco:

person = {}

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

Jest to funkcja I 'm testowania:

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

Aby przetestować ten bieg I

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

„Test2” jest json-file stworzyłem i „osoba” jest co wierzę jest atrybutem.

Gdy uruchomię to pojawia się błąd:

json_tmp = json.loads(json_file.read())
AttributeError: 'str' object has no attribute 'read'
Utwórz 10/10/2019 o 00:37
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

json_fileJest to nazwa pliku, a nie pliku. Musisz otworzyć ten plik, aby ją przeczytać.

Można również użyć json.load()zamiast json.loads(). Będzie ona odczytywana z samego pliku.

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)

Jednak plik pokazać nie jest właściwy plik JSON. Plik JSON powinien wyglądać następująco:

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

Co pokazałeś to skrypt Pythona, który definiuje zmienną o nazwie person. Jeśli chcesz przeczytać i wykonać inny skrypt, można użyć import.

Odpowiedział 10/10/2019 o 00:46
źródło użytkownik

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