Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2017 12:17:29

life1919
Зарегистрирован: 2017-11-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

Вобщем нужно сделать заполнение файла введёнными данными и также считывание данных из файла с выводом на экран.
Думал сделать проверку на заполненность файла и если в нём уже есть записи, то добавлять новые в конец файла(а именно ключи с параметрами - имя, фамилия, год рождения в словарь).

 import pickle
import sys
def add_stud(FILENAME, users):
    with open(FILENAME, "ab") as file:
        pickle.dump(users, file)
def print_stud(FILENAME):
    i = 1
    with open(FILENAME, "rb") as file:
        users_from_file = pickle.load(file)
        for user in users_from_file:
            print('[', i, '] - ', "Имя:", user[0], "\tФамилия:", user[1], "\tГод рождения:", user[2])
            i += 1
FILENAME = "users.dat"
while True:
    print(" [1] - Добавить запись о студенте")
    print(" [2] - Удалить запись о студенте")
    print(" [3] - Вывести на экран записи о студентах")
    print(" [4] - Отсортировать записи по возрасту")
    print(" [5] - Средний возраст студентов")
    print(" [6] - Выход из программы")
    do = input("Укажите номер действия: ")
    if do == "1":
        users = [
        [input('Имя - '), input('Фамилия - ') ,int(input('Год рождения - '))]
        ]
        '''users = {
            0: input('Имя - '),
            1: input('Фамилия - '),
            2: int(input('Год рождения - '))
        }'''
        add_stud(FILENAME, users)
        print('Запись добавлена\n')
    elif do == "2":
        pass
    elif do == "3":
        print_stud(FILENAME)
    elif do == "4":
        pass
    elif do == "5":
        pass
    elif do == "6":
        sys.exit()
    else:
        print("\nПопробуй еще раз.\n")

Отредактировано life1919 (Ноя. 4, 2017 13:21:49)

Офлайн

#2 Ноя. 4, 2017 12:41:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

life1919
Вообщем
Вы правда думаете, что это слово так пишется?



Офлайн

#3 Ноя. 4, 2017 12:43:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

life1919
Зачем тут pickle, почему не писать данные, например, в xml?



Офлайн

#4 Ноя. 4, 2017 13:20:30

life1919
Зарегистрирован: 2017-11-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

FishHook
life1919Зачем тут pickle, почему не писать данные, например, в xml?
Нужно чтобы в файле данные хранились в бинарном виде

Офлайн

#5 Ноя. 4, 2017 13:50:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

life1919
Нужно чтобы в файле данные хранились в бинарном виде
Кому нужно и зачем?
Чтобы хранить данные в бинарном виде, надо сначала придумать, как в массиве двоичных данных узнать, когда закончились данные для сущности А и начались данные для сущности Б. У вас фиксированная длина данных? Нет. Ну вот взял я объект “Вася”, задампил его пиклом, залил данные в файл. Потом задампил объект “Петя”, добавил его в тот же файл. Ну и как вы теперь поймете, где Вася, а где Петя?



Офлайн

#6 Ноя. 4, 2017 13:55:21

life1919
Зарегистрирован: 2017-11-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

FishHook
И что мне в таком случае делать?
Задание заключалось в создании БД в бинарном файле с возможностью добавления, удаления, сортировки и вывода записей на экран

Офлайн

#7 Ноя. 4, 2017 13:56:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

 import pickle
class Person:
    def __init__(self, name):
        self.name = name
p1 = Person("Vasya")
p2 = Person("Petya")
print(pickle.dumps(p1))
print(pickle.dumps(p2))

 b'\x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00nameq\x03X\x13\x00\x00\x00Vasya Zilbershteiynq\x04sb.'
b'\x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00nameq\x03X\x0c\x00\x00\x00Petya Ivanovq\x04sb.'
Теперь вы слили все в один файл, получили
 \x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00nameq\x03X\x13\x00\x00\x00Vasya Zilbershteiynq\x04sb.\x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00nameq\x03X\x0c\x00\x00\x00Petya Ivanovq\x04sb.

Ну и где кто?



Офлайн

#8 Ноя. 4, 2017 14:00:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Заполнение и считывание бинарного файла

life1919
Задание заключалось в создании БД в бинарном файле с возможностью добавления, удаления, сортировки и вывода записей на экран

Реляционные СУБД работают не так. Вы записываете в БД записи строго определенной структуры, каждое поле записи имеет тип, тип подразумевает максимальную длину значения в байтах. Почитайте хотя бы википедию по этому вопросу.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version