Файлы с прямым доступом

Всем здравствуйте, подскажите хорошие источники по работе с файлами, в книге, по которой сейчас занимаюсь, описана работа лишь с файлами с последовательным доступом. Нужен совет где прочитать про работу с файлами в полном объёме. Спасибо

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

2
Автор поста оценил этот комментарий

Не понятен сам вопрос.


Что значит "описана работа лишь с файлами с последовательным доступом"?


"Про работу с файлами в полном объёме" - это ты про скачивание?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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


Далее написано:

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


В связи с этим просьба посоветовать источник, в котором рассматривается работа с файлами в полном объёме



показать ответы
1
Автор поста оценил этот комментарий
Присоединюсь к тому, что тебе тут уже сказали. Добавлю от себя, что под файлом мы можем понимать умозрительно любой контейнер, умеющий хранить в себе информацию.

Так вот под то, что тебе хочется, есть отдельные форматы файлов, которые могут по сути представлять из себя подобие баз данных. Например, hdf5, netCDF4, tif на худой конец...

В них есть возможность хранить массивы данных и дергать их по индексу или названию слоя или все вместе.

Но банальный текстовый файл такого тебе не позволит.

Рассмотри также json-файлы. Их придётся грузить в память полностью, а дальше по ключу дергать любой кусок.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо
показать ответы
0
Автор поста оценил этот комментарий

Хороший источник это докумментация Python: https://docs.python.org/3/

Сейчас попробую вкратце объяснить в чём трудности и куда копать. На низком уровне операции с файлами можно представить совокупностью действий "записать что-то", "прочесть что-то" и поставить курсор. Если ты просто читаешь из файла до его конца или просто пишешь в файл пока данные не кончатся, то курсор автоматически перемещается обходя файл из начала в конец в первом случае и всегда стоит на его конце во втором.

Конкретно с текстовыми файлами (строки кончающиеся символами \n) эффективно решить задачу об удалении строки не выйдет. Лучшее что ты можешь сделать это пропустить с помощью "поставить курсор" (seek) ту часть, что не изменилась, но вся часть файла что идёт начиная с удаленной строки должна измениться, все символы за этой строкой сдвинутся влево на длину этой строки.

Мы можем ещё улучшить эту ситуацию, если бы например мы бы договорились что символы с нулевым кодом мы просто игнорируем. Тогда удаленную строку мы можем заменить нулевыми символами. Мы стали эффективнее писать, но теперь нам стало уже не так эффективно читать, ведь при чтении мы эти нулевые символы должны фильтровать.

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

Можно взять вариант попроще - например, попробовать сделать для себя пример с хранением чисел в двоичном виде в файле с возможностью быстро выбирать максимальное/минимальное, с достаточно быстрой вставкой новых чисел (log n) и удалением (log n). Одним словом можно попробовать сделать структуру данных куча (heap) на файле. Это даст некоторый навык в низкоуровневых двоичных операциях произвольного доступа к файлу.

Ну а если нужно именно применять на практике, прочтите другие комменты, где советуют библиотеки и форматы файлов решающие именно такую задачу.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо
показать ответы
0
ping localhost
Автор поста оценил этот комментарий

возможно в книге имелся в виду не доступ к файлам как-то по иному, а например модуль shutil который дает копировать файлы и изменять их параметры.


кстати по поводу чтения файлов советую почитать https://habr.com/ru/post/453862/

у pathlib есть вариант чтения файлов по glob-у, то есть не надо делать извраты чтобы найти все файлы одного расширения

https://stackoverflow.com/questions/48181073/how-to-glob-two...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Возможно, спасибо, прочитаю
1
Автор поста оценил этот комментарий

А остальные с высочайшей степенью вероятности не встретятся вам в обычной практике, особенно при разработке на питоне. За те 25 лет, которые я так или иначе занимался программированием, лично мне ни разу не встретилась задача такого рода, под которую не существовало бы уже готового решения.


Это, скажем так, вопрос принципиально другого уровня и он напрямую не связан с языком. Вам надо смотреть, как такой доступ в принципе реализуется в конкретной файловой системе средствами конкретной ОС (собственно, про API, комментарий уже был)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Понятно, смутило лишь то, что в книге написали (остальную инфу ищите самостоятельно). Написали бы, что-то типа вашего комента и вопросов бы не было. Спасибо
показать ответы
Автор поста оценил этот комментарий

А у вас интерес академический или прикладной?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Академический. Читаю главу по работе с файлами, а там рассматривают только файлы с последовательным доступом (.txt всякие). А как же остальные? )
показать ответы
Автор поста оценил этот комментарий

https://pythonworld.ru/tipy-dannyx-v-python/fajly-rabota-s-f...


Или официальую доку. Или гуглишь по "file python"


Самый ценный совет - учись решать проблемы самостоятельно. Это не тот вопрос, для которого нужен консилиум

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Не соглашусь. Вопрос в том, какой источник лучше взять, что-то вроде сбора мнений. Как если бы я спросил какую книгу по пайтону читать. По крайней мере я такой смысл вкладывал в вопрос )
0
Автор поста оценил этот комментарий
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Да, да, лучший способ научиться программировать с нуля это читать мануал...
Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий
Вот, кстати, статейка на тему

https://pythonspeed.com/articles/json-memory-streaming/
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Схоронил
Автор поста оценил этот комментарий

Кстати забыл главное.

1. По задаче проще понять суть.


Создай свою файловую индексную ФС примитивного уровня. Есть файл, в нём есть имена файлов или сущностей, и контент. Причём чтобы был индекс.

Для тестов даже ходить далеко не надо.


2. Посмотри как это сделано. Есть куча форматов принятых, например pak из quake https://sources.ru/magazine/0906/02.html - всё то же с многоуровневыми только в виде сущности каталогов.

А то что у тебя будет условно более старый формат а-ля WAD из первого дума. https://doomwiki.org/wiki/WAD

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо, очень помогли. Много ценной инфы
Автор поста оценил этот комментарий

Суть - к питону это не привязано. На RAW уровне все его функции для работы с файлами дублируют принятые и по факту переходники на функции либов или ядра OS(ну хотя бы они +- одинаковы от ОС к ОС)


И тут сразу две ветки

1. Обучение - тебе надо понять каким методом используется адресация и хранение каких-либо записей(обычно struct) в файлах. Доступ и прочее - там аналогично и похоже на malloc/free в C/C++ притяном stdlib например. Индекс имязаписи=адрес(ясное дело мы про динамику)+сама запись где-то по адресу x в файле итд, лучше прямо туда и пойти и понять как работать с указателями в C++, там вокруг этого пол языка и идеология пляшет собственно, а на сам язык насрать.

2. Практика. НАСРАТЬ НА ТЕМУ, ВООБЩЕ. Ты будешь работать с API(классом, интерфейсом, да насрать чем, суть понятна) либа для работы с соответствующим типом данных в файлах, на всё выше в 99% класть вообще, будет оно читать файл в память полностью или играть или строить индекс - уже где как. Например

https://habr.com/ru/post/481140/

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо
показать ответы
0
Автор поста оценил этот комментарий

Нет никаких списков, есть описанный формат хранения, адресация определяется им, если у полей фиксированные длины - положение каждой записи считается легко, если нет - фулл скан или индекс.

Об этом бесполезно читать потому что оно в каждом кейсе свое.

В том же принятом для разработки почти в любом курсе есть статика для начала - типа fwrite(f, somestruct, size of(somestruct)) итд например и оттуда пляски в *работе с файлами нетипизированными*

В паскале тот же костыль  вида file of xxx есть и прочее, прочее....


Освой базисы апи системы. Все пляшет вокруг одного, вставить файл или запись  в середину файла невозможно без костылей, и далее уже индексы для чтения и костыли для такого при правке записей со сменой длины в середине

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Начинаю понимать, большое спасибо )
показать ответы
Автор поста оценил этот комментарий

Индекс или чтение файла и индекс на лету каждый раз по тем же \n, ничего принципиально разного тут нету

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Я как рассуждаю:
Есть список 100 людей. ID, имя, фамилия, телефон. Мне надо изменить телефон у человека с id #73. Я понимаю как это сделать в SQL, там удобно, но в книге по пайтон показан громоздкий способ, где перебирается весь фаил., но при этом намекают, что надо где-то в другом месте прочитать про более удобный способы. Вы не знаете где? )
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества