Чтение / запись объектов класса в файл данных в python - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть объект класса, который я хочу записать в файл данных. Объекты p1 и p2 должны быть записаны в файл данных. И снова можно непосредственно прочитать объект. Я знаю, что есть такой же подход, но я не хочу этого.

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p1 = Person("John", 36)
p2 = Person("Michael", 30)
# Now I want to write this object into a dat file
fp = open("file.dat", "w")
fp.write(p1)

# And while reading I want this object to be read directly into the variable
fp = open("file.dat", "w")
p1 = fp.read()
p2 = fp.read()

Можно ли в python сделать то же самое?

Вот соответствующий C программа для того же

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct car {
    int id;
    char name[15];
    int price;
    char colors[3][5];
} car;

int main()
{
    car obj1 = { .id = 5,
                .name =  "honda city zx", 
                .colors = {"red", "black", "blue"}
    };
    car obj2 = { .id = 6,
                .name =  "honda city",
                .colors = {"lal", "kala", "neela"} 
    };

    FILE *fp;

    //WRITING TO THE FILE
    fp = fopen("car_details.dat", "w");
    fwrite(&obj1, sizeof(obj1), 1, fp); 
    fwrite(&obj2, sizeof(obj2), 1, fp);
    fclose(fp);

    // READING FROM THE FILE
    fp = fopen("car_details.dat", "r");
    car obj;
    while(fread(&obj, sizeof(obj), 1, fp))
    {
        printf("id : %d\nname : %s\nprice : %d\ncolors : {%s, %s, %s}\n\n", obj.id, obj.name, obj.price, obj.colors[0], obj.colors[1], obj.colors[2]);
    }

    return 0;
}

Как мне сделать то же самое в python?

1 Ответ

0 голосов
/ 13 февраля 2020

Вы можете попробовать это, если вы действительно хотите следовать тому же подходу. Однако я не рекомендую это.

import pickle

class Car(object):
    def __init__(self, id, name, price, color):
        self.id = id
        self.name = name
        self.price = price
        self.color = color

with open('car_details.dat', 'wb') as output:

    obj1 = Car(5, "honda city zx", 1000, "Red")
    pickle.dump(obj1, output, pickle.HIGHEST_PROTOCOL)

    obj2 = Car(6, "Innova", 2000, "Grey")
    pickle.dump(obj2, output, pickle.HIGHEST_PROTOCOL)

del obj1
del obj2

with open('car_details.dat', 'rb') as input:
    obj1 = pickle.load(input)
    print(obj1.id, obj1.name, obj1.price, obj1.color)
    obj2 = pickle.load(input)
    print(obj2.id, obj2.name, obj2.price, obj2.color)
...