Найти - Пользователи
Полная версия: Заполнение и считывание бинарного файла
Начало » Python для новичков » Заполнение и считывание бинарного файла
1
life1919
Вобщем нужно сделать заполнение файла введёнными данными и также считывание данных из файла с выводом на экран.
Думал сделать проверку на заполненность файла и если в нём уже есть записи, то добавлять новые в конец файла(а именно ключи с параметрами - имя, фамилия, год рождения в словарь).
 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")
FishHook
life1919
Вообщем
Вы правда думаете, что это слово так пишется?
FishHook
life1919
Зачем тут pickle, почему не писать данные, например, в xml?
life1919
FishHook
life1919Зачем тут pickle, почему не писать данные, например, в xml?
Нужно чтобы в файле данные хранились в бинарном виде
FishHook
life1919
Нужно чтобы в файле данные хранились в бинарном виде
Кому нужно и зачем?
Чтобы хранить данные в бинарном виде, надо сначала придумать, как в массиве двоичных данных узнать, когда закончились данные для сущности А и начались данные для сущности Б. У вас фиксированная длина данных? Нет. Ну вот взял я объект “Вася”, задампил его пиклом, залил данные в файл. Потом задампил объект “Петя”, добавил его в тот же файл. Ну и как вы теперь поймете, где Вася, а где Петя?
life1919
FishHook
И что мне в таком случае делать?
Задание заключалось в создании БД в бинарном файле с возможностью добавления, удаления, сортировки и вывода записей на экран
FishHook
 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.

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

Реляционные СУБД работают не так. Вы записываете в БД записи строго определенной структуры, каждое поле записи имеет тип, тип подразумевает максимальную длину значения в байтах. Почитайте хотя бы википедию по этому вопросу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB