Мне нужно создать функцию которая будет брать из списка объекты класса и записывать всех их в файл
Мне нужно создать функцию которая будет брать из списка объекты класса и записывать всех их в jsonlines файл, файл уже существует в нем список ключей записан мне нужно чтоб он брал объекты из этого списка:
users = [User(**item) for item in result]
сам список виглядит так:
[<__main__.User object at 0x106ec7340>, <__main__.User object at 0x106ec73a0>, <__main__.User object at 0x106ec72e0>, <__main__.User object at 0x106ec7400>, <__main__.User object at 0x106ec7520>, <__main__.User object at 0x106ec75e0>, <__main__.User object at 0x106ec7610>, <__main__.User object at 0x106ec7670>, <__main__.User object at 0x106ec7700>, <__main__.User object at 0x106ec7790>, <__main__.User object at 0x106ec7820>, <__main__.User object at 0x106ec78b0>, <__main__.User object at 0x106ec7940>, <__main__.User object at 0x106ec79d0>, <__main__.User object at 0x106ec7a60>, <__main__.User object at 0x106ec7af0>]
и записал их в файл вот функция которую я написал но она не принимает объекты:
def users_2_file():
with jsonlines.open('data.jsonl', 'a') as jsonlines_f:
jsonlines_f.write(users)
но одно примечание нужно чтоб он записывал эти объекты чтоб в файл они имели вид списка ключей где каждый объект выглядит как-то так:
{"name": "Mary", "time_created": 1665333931, "gender": "female", "age": 18, "city": "NY", "last_name": "Smith", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 8508}
вот класс из которого создаются объекты:
class User:
def __init__(self, user_id, name, time_created, gender, last_name, premium, city, age, ip, birth_day, balance):
self.user_id = user_id
self.name = name
self.time_created = time_created
self.gender = gender
self.last_name = last_name
self.premium = premium
self.city = city
self.age = age
self.ip = ip
self.birth_day = birth_day
self.balance = balance
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
import jsonlines
class User:
def __init__(self, user_id, name, time_created):
self.user_id = user_id
self.name = name
self.time_created = time_created
def __str__(self):
return(f'{self.user_id} {self.name} {self.time_created}')
# создаем список
users = [
User(7, 'a', '2022-11-10 10:00'),
User(12, 'b', '2022-11-10 22:19'),
]
# сохраняем в файл. вместо объекта отдаем словарь со свойствами
with jsonlines.open('data.jsonl', 'w') as jsonlines_f:
for x in users:
jsonlines_f.write(vars(x))
# удаляем список
users = []
# прочитаем его из файла
with jsonlines.open('data.jsonl') as reader:
for x in reader:
users.append(User(**x))
# посмотрим что получилось
for x in users:
print(x)
# 7 a 2022-11-10 10:00
# 12 b 2022-11-10 22:19