Как считать байты с файла, не открывая его
Как считать из файла все байты в массив?
Всем здравствуйте. Есть двоичный файл. Как считать его содержимое в соответствующий ему по.
Считать в текст из документа Word, не открывая его
Как считать в VB.net текст из документа Word (*.doc, *.docx), не открывая это документ? То есть.
Считать байты вида 0011001 из файла
Есть ли в питоне возможность считать файл.. гм.. в байтах? я понимаю что есть штука как.
Узнать атрибуты файла не открывая его
Подскажите,как НЕ открывая определенный exe-файл (скомпилированный в VB) считать его атрибуты.
3479 / 2484 / 1172
Регистрация: 14.08.2016
Сообщений: 8,182
как прочитать определенное количество страниц из книги, не открывая книгу?
Регистрация: 28.11.2017
Сообщений: 157
Просто у меня есть большой файл ( больше 4 гб ) и когда я пытаюсь считать с него некоторые байты, у меня приложение выдает исключение — нехватка оперативной памяти
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,536
Записей в блоге: 11
Сообщение от korozyan
меня есть большой файл
Используйте класс MemoryMappedFile.
Регистрация: 28.11.2017
Сообщений: 157
Сообщение от ashsvis
Используйте класс MemoryMappedFile.
Можно пример какой нибудь?
17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,087
Сообщение от korozyan
когда я пытаюсь считать с него некоторые байты
Некоторые или все-таки все?
Для некоторых используйте класс FileStream, свойство Position и метод Read.
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,536
Записей в блоге: 11
Сообщение от korozyan
пример какой нибудь?
Регистрация: 28.11.2017
Сообщений: 157
Сообщение от kolorotur
используйте класс FileStream, свойство Position и метод Read
Что вообще нужно: считать первые 2097152 байта, не открывая файл в памяти, так как если его открывать — нехватка памяти. Преобразовать байты и записать их в файл, также не открывая его
17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,087
Сообщение от korozyan
считать первые 2097152 байта
1 2 3
var bytes = new byte[2097152]; using (var fs = File.OpenRead("blabla.txt")) fs.Read(bytes, 0, bytes.Length);
Запись так же, только вместо OpenRead и Read соответствующие методы.
Сообщение от korozyan
не открывая файл в памяти
Загрузить байты в память, не используя память?
Магия, не иначе!
Регистрация: 28.11.2017
Сообщений: 157
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
var bytes = new byte[2097152]; using (var fs = File.OpenRead(filePath)) { fs.Read(bytes, 0, bytes.Length); } using (var salsa = new Salsa20.Salsa20()) { using (var fstream_out = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { salsa.Key = key; salsa.IV = iv; using (var cstream = new CryptoStream(fstream_out, salsa.CreateEncryptor(), CryptoStreamMode.Write)) { cstream.Write(bytes, 0, bytes.Length); } } } using (var fs = File.OpenWrite(filePath)) { fs.Write(bytes, 0, bytes.Length); }
Байты. Что мы считываем из файла?
В общем, это информация для новичков. Когда пошла тема про считывание информации из файла, встал вопрос: если файл содержит буквы, то почему мы считываем из него цифры в виде байтов и чем является все-таки в таком случае байт. О том, что такое байт, уже достаточно хорошо написано здесь. Но, после прочтения, все равно остался вопрос механизма трансформации букв в цифры, пришлось немного поковыряться в интернете. Поэтому написанное ниже можно считать дополнением. Компьютер хранит каждый файл в виде информации состоящей из нулей и единиц в бинарной форме. Каждый файл фактически является набором байтов следующих один за другим. В типовом варианте существует два вида файлов с информацией: текстовый файл и бинарный файл. Текстовый файл содержит типовой человеческий набор читабельных символов, который мы можем открыть в любом текстовом редакторе. Бинарные файлы состоят из символов, которыми мы не привыкли оперировать в обычной жизни, соответственно требуется специальная программа,, способная их прочитать. Текстовые файлы состоят из букв, цифр и других общепринятых символов. Такие файлы имеют расширения .txt, .py, .csv и т.д. Когда мы открываем такой файл, то видим привычный набор символов, образующих слова. Хотя на самом деле это содержание внутри компьютера не хранится в таком виде. Оно хранится в виде битов, то есть 0 или 1. В различных кодировочных таблицах ASCII, UNICODE или какой другой значение каждого символа определено в бинарном виде. Соответственно, если байт может вмещать 256 символов, то каждому символу соответствует своя двоичная кодировка из нулей и единиц (восемь подряд записанных нулей или единиц дают один символ). Таким образом, когда файл открывается, текстовый редактор осуществляет перевод каждого значения ASCII в привычный нам символ и отображает его уже в привычном виде. Например, под номером 65 в бинарном виде кода ASCII идет 1000001, которое отобразится в файле латинской (не кириллица. Кириллица стартует со 192 позиции) буквой «А». То есть в системе ASCII байту со значением 1000001 соответствует значение латинской буквы «А». Каждая линия файла имеет свой знак переноса строки – EOL (End of Line). Часто этим символом (двумя символами) является «\n» (бинарное значение в ASCII: 00001010). Считав такой символ программа интерпретирует его как конец строки и переход на строку ниже. Есть другие подобные «функциональные символы». Бинарные файлы, как и текстовые, хранятся в бинарном виде, но к ним не «прилагается» программа, которая их раскодирует, то есть нет расшифровочной таблицы типа ASCII. В основном содержание таких файлов представляет собой картинки, аудио и видео, которые в свою очередь являются ужатыми версиями других файлов, например самовыполняющихся файлов (.ехе). Такие файлы (бинарные) не читаются человеком в обычном понимании, поэтому попытка открыть их привычными текстовыми редакторами отобразит кучу непонятного мусора. Соответственно для корректного чтения таких файлов выпускаются специальные программы. Бинарные файлы также хранятся в виде набора байтов, но в данном случае изменение хотя бы одного бита может сделать нечитабельным весь файл. Таблицу символов ASCII можно посмотреть здесь. Таким образом, когда мы читаем файл, то в переменную byte считываются по 8 символов (единица или ноль), которые затем могут быть конвертированы какой-либо программой типа Блокнот в читабельные символы. Источник, который помог разобраться.
Как узнать сколько байт из файла прочитано?
Пытаюсь распарсить большой XML. Скрипт отваливается по таймауту. Можно ли узнать, сколько байт было вычитано?
$reader = new XMLReader();
$reader->open($file);
while ($reader->read())
- Вопрос задан более трёх лет назад
- 355 просмотров
Комментировать
Решения вопроса 1
Stalker_RED @Stalker_RED
$reader = new XMLReader(); $reader->open($file); $counter = 0; while ($reader->read()) < . $counter++; // ← счетчик обработанных узлов >
P.S.: Таймаут увеличить не вариант?
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
McMike @McMike Автор вопроса
Да, примерно так и сделал в итоге. Я просто думал, может есть какой-то указатель, по которому можно вычислить сразу.
Ответы на вопрос 1
$file_path = "your_file"; $file_handle = fopen($file_path, "rb"); $i = 0; while (!feof($file_handle)) < $symbol = fread($file_handle, 1); $i++; >echo 'total byte = '. $i."\n";
Запуск делай в cli режиме или же костыль увеличения времени выполнения скрипта
байты в строку и наоборот из файла
я делаю модуль для стеганографии, и мне нужна была функция удаления закодированного сообщения И так есть код:
def remove_text(filepath): m = None with open(filepath, 'rb') as f: data = f.read() m = str(data).split('2d2a2a2d')[0]
после его выполнения в m храниться что то такое: \xd5\x93+\x9eFJ\xa2\xfc\xe4\xf3\xc0\xae\x1bV\x94\x08.J\xb1\x08\x01\x8d\x963\xf3\xa9e8\x00u\xe3\x9c\x9e\xd5\xc3V\xa2\x8a\xf7\x99\xdfF\x9bG\x9cF\x1eGm\xdc.\xe0\xa8\x08\xfb\xd9==\xab\xd1\xf4\rBD\xbd\x85«\x08\xab\x1al\x90cz\x00Wi \x1c\xf3\xd4\xf1\xd3\xb61\xc61\xad\x1d\x8d\xaaB\\\xb6=\xfbB\xd6R\xd9\xa3u\xb8\x8d\xe61\x98\xe3Dl\xf9\x9b\x81\’\x03\xb9\xc6q\x9eEv\xb6Z\xfa\xcb\x18\x90\xc8\xc5\xbea(\x91p\x8a\xa3\x8d\xd9\xcf\xae\x7f/z\xe9Ub\xf4g\x9f:s\xea\xc6]j\x05\xe3\xb8\x8e\x12\x80\x91\xf7\xddCq\x9c\xf4=\xfd\x0ek\x91\xd4.\xd9\xaeS\xc8\x980\xb8\x03\xe4c\xbdc?\xdf\xcf\xa9\xeb\xc9#\x81\xc0\xef\x8c\xd77\xbc\xf4.\x95+\xb4\xa4\xca\xf0\xcd4[\xbf\x7f\x1c\x9fy\x18:\xab\x91\xb8\x10~\x87\x9e\x0e8\xf5\xcdj\xdaO\x0c\xa7\xcaI\x0c\xb2\x90\t\xde\x85\x19~\x9c\x9c\x83\xeb\xf5\xaf.\xbb\xa0\xa2\xef-U\xef\xe4z\xd40\xcd;\xa9#v\x0bu&E nP\x08|\xe3\xf4\xfc\xbfZ\xdc\x8a[u\x92\xd3\x12G3[\xa7\x97\’\x92\xac\x9b\xc6\xe2NI\x1dpq\xc7e\x15\xe6\xd4\x95\x1bFQg\xab\n.\xdf\x11\xd3\xc0\xc9\xb5D@\x92\x7f\x85:.<\x8e\xc0\x0e\xbf\x85uz\x13Alei\x03I
with open('abc.jpg', 'wb') as f: f.write(m)