Питон не читает файл
Файл, содержащий бинарные данные, называется двоичным (бинарным) файлом. Любые форматированные и неформатированные бинарные данные хранятся в бинарных файлах, нечитабельных для человека и использующихся компьютером напрямую.
Когда бинарный файл требуется просмотреть или переместить, содержимое файла переводится в формат, понятный человеку. Бинарный файл имеет расширение .bin. Прочитать его можно с помощью встроенной функции или модуля. В этом уроке мы разберём различные способы чтения бинарных файлов с помощью Python.
Что такое метод readline() в Python?
Этот метод читает одну строку из файла и возвращает ее.
В следующем примере у нас есть текстовый файл с двумя предложениями:
Если мы воспользуемся методом readline() , он выведет нам только первое предложение нашего файла.
Этот метод также принимает необязательный параметр размера. Мы можем изменить наш пример, добавив число 7. В таком случае программа считает и выведет нам только фразу This is :
Читаем бинарный файл с помощью NumPy
В этой части мы поговорим о том, как создать бинарный файл и прочитать его с помощью массивов NumPy. Перед началом работы необходимо установить модуль NumPy командой в терминале или через ваш редактор Python, в котором вы будете писать программу.
Функция tofile() создаёт текстовый или бинарный файл, а fromfile() считывает данные из файла и создаёт массив.
Имена файлов и правильные пути
Если текстовый файл, который нужно открыть, и ваш текущий файл находятся в одной директории (папке), можно просто указать имя файла внутри функции open() . Например:
На скрине видно, как выглядят файлы, находящиеся в одном каталоге:
Но если ваш текстовый файл находится в другом каталоге, вам необходимо указать путь к нему.
В этом примере файл со случайным текстом находится в папке, отличной от той, где находится файл с кодом main.py:
В таком случае, чтобы получить доступ к этому файлу в main.py, вы должны включить имя папки с именем файла.
Таким образом, чтобы указать путь к файлу правильно, важно отслеживать, в каком каталоге вы находитесь.
Синтаксис fromfile()
Первый аргумент обязательный – он принимает имя файла, путь или строку. Содержимое файла будет прочитано, только если вы укажете имя файла. dtype определяет тип данных в возвращаемом массиве. Count задаёт число элементов массива. Sep – для разделения элементов текста или массива. Offset определяет позицию в файле, с которой начинается считывание. Последний аргумент нужен, чтобы создать массив, не являющийся массивом NumPy.
Напишем следующий код, чтобы создать бинарный файл с помощью массива NumPy, прочитать его и вывести содержимое.
Метод readable(): проверка доступности файла для чтения
Если вы хотите проверить, можно ли прочитать файл, используйте метод readable() . Он возвращает True или False .
Следующий пример вернет True , потому что мы находимся в режиме чтения:
Если бы мы изменили этот пример на режим «w» (для записи), тогда метод readable() вернул бы False :
Английский для программистов
Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас
Что такое метод read() в Python?
Метод read() будет считывать все содержимое файла как одну строку. Это хороший метод, если в вашем текстовом файле мало содержимого .
В этом примере давайте используем метод read() для вывода на экран списка имен из файла demo.txt:
Запустим этот код и получим следующий вывод:
Этот метод может принимать необязательный параметр, называемый размером. Вместо чтения всего файла будет прочитана только его часть.
Если мы изменим предыдущий пример, мы сможем вывести только первое слово, добавив число 4 в качестве аргумента для read() .
Если аргумент размера опущен или число отрицательное, то будет прочитан весь файл.
Решение
Как ты думаешь почему у меня read ничего не вывела?
Да потому что я уже один раз прочитал файл (*файловый_объект неявно вызвала readlines) и указатель на позицию чтения находится теперь в конце.
Но закрытие файла и повторное его открытие как раз и возвращает указатель на начало файла. Но переместить указатель на начало файла можно и без закрытия файла, так будет значительно быстрее.
Добавлено через 7 минут
"Метод seek перемещает указатель текущей позиции в файле к указанному месту.
Операции чтения и записи всегда выполняются в текущей позиции в файле. При открытии файлов текущая позиция обычно устанавливается в смещение 0 от начала файла и перемещается вперед по мере чтения/записи данных. Метод seek позволяет переместить текущую позицию для следующей операции чтения/записи в другое место, для чего ему достаточно передать величину смещения в байтах.
Метод seek в языке Python принимает также второй необязательный аргумент, который определяет физический смысл первого аргумента и может принимать одно из трех значений: 0 – абсолютная позиция в файле (по умолчанию), 1 – смещение относительно текущей позиции и 2 – смещение относительно конца файла.
Вообще, метод seek поддерживает произвольный доступ на уровне смещения в байтах. Используя в качестве множителя размер записи в двоичном файле, можно организовать доступ к записям по их относительным позициям.
Возможность произвольного доступа поддерживается и для файлов, открытых в текстовом режиме. Но выполняющиеся в текстовом режиме операции кодирования/декодирования Юникода и преобразования символов конца строки сильно осложняют вычисление абсолютных смещений в байтах и длин, необходимых методам позиционирования и чтения, – представление ваших данных может значительно измениться при сохранении в файл. Метод seek лучше подходит для работы с двоичными файлами; исключение составляет простой некодируемый текст ASCII, в котором отсутствуют символы конца строки.
Если файл открыт в режиме добавления данных (a или a+) любые изменения, сделанные функцией seek() будут отменены при при последующей записи. Несмотря на то, что при использовании a функция, по сути, ничего не делает, её, однако же, вполне можно использовать в режиме a+.
Если файл открыт в текстовом режиме — без указания b (актуально для версии 3.Х в режиме t) , допускается указание только смещений, возвращаемых tell(), поведение при указании других значений неопределено.
Подробнее о режимах доступа читайте в описании функции open()
Внимание
Не все типы объектов-файлов поддерживают перемещение указателя."
В данном случае ошибка была не в этом. Ничто не запрещает одновременно читать один и тот же файл.
Только метод write() не гарантирует, что данные запишутся на диск. Нужно было вызвать flush() - этот, вроде, гарантирует запись и сброс буферов или сразу закрыть файл, тогда данные сразу запишутся.
ТС же открыл один и тот же файл трижды и следовательно у него три курсора (указателя) на файл. Что уже само по себе странно.
Выводит: ничего C:\Users\Kresh\AppData\Local\Programs\Python\Python37\python .exe "D:/Все/Учеба!/new 1.py"
Process finished with exit code 0
Вопрос: Почему он не выводит содержимое, хотя и добавляет new , и ошибки не выдает , если нужен другой режим , подскажите пожалуйста, но чтобы с были функции добавлять и читать
Если ответ можно было загуглить скажите , пожалуйста, как построить вопрос, нашел только справочник(на все вопросы,появляется справка о работе с файлами)
С одним \ в пути(здесь определенно , что-то не так) не работает .
Записать в текстовый файл содержимое Edit, и прочитать содержимое файла в Memo
Создать приложение которое создает текстовый файл текстовый файл text.txt записывает в него текст.
Прочитать содержимое файла
Написать shell-процедуру, которая: 1). Читает содержимое файла, имя которого вводится при.
Английский для программистов
Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас
Столкнулся с проблемой, что read категорически отказывается считывать текст и заносить его в переменную. В ответ выдает:
WaveStream, не работает Read
Считываю mp3 файл, и перегоняю его в WaveStream(NAudio) с изменением формата. Дале пытаюсь.
Не работает NetworkStream.Read()
Привет, есть проблема, при получении данных через NetworkStream, ничего не происходит, будто ему.
Результат
После выполнения скрипта мы получим следующий результат. Бинарный файл содержит 7 чисел, первые 5 вывелись на консоль.
Результат
После выполнения скрипта мы получим следующий результат.
Решение
Знаю покажется бредом ,но r+ я использовал раз 100 , но именно сейчас (после перезагрузки)он нормально заработал, до этого он добавлял , но при использовании print ,он не показывал , что появилось new.
Мда, даже как-то стыдно.
Добавлено через 7 минут
Эм , не понял если :
показывает , что в файл ничего не добавилось.
Добавлено через 33 секунды
David099, документация! Почитай ее. Или так и будешь по каждому вопросу тему создавать, обрати внимание например на метод seek.
Как открыть текстовый файл в Python с помощью open()
Если вы хотите прочитать текстовый файл с помощью Python, вам сначала нужно его открыть.
Вот так выглядит основной синтаксис функции open() :
Как прочитать текстовый файл при помощи цикла for
В качестве альтернативы методам чтения можно использовать цикл for .
Давайте распечатаем все элементы файла demo.txt, перебирая объект в цикле for .
Запустим наш код и получим следующий результат:
Считываем бинарный файл со строковыми данными в массив байтов
В Python существует множество способов прочитать бинарный файл. Можно прочитать определённое количество байтов или весь файл сразу.
В приведенном ниже коде функция open() открывает для чтения string.bin, а функция read() на каждой итерации цикла while считывает по 7 символов в файле и выводит их. Далее мы используем функцию read() еще раз, но уже без аргументов — для считывания всего файла. После считывания содержимое выводится на экран.
Необязательный параметр режима в open()
При работе с файлами существуют разные режимы. Режим по умолчанию – это режим чтения.
Он обозначается буквой r .
Вы также можете опустить mode= и просто написать «r» .
Существуют и другие типы режимов, такие как «w» для записи или «a» для добавления. Мы не будем вдаваться в подробности о других режимах, потому что в этой статье сосредоточимся исключительно на чтении файлов.
Полный список других режимов можно найти в документации.
Что такое метод readlines() в Python?
Этот метод читает и возвращает список всех строк в файле.
Предположим, у нас есть текстовый файл demo.txt со списком покупок:
В следующем примере давайте выведем наши продукты в виде списка с помощью метода readlines() .
Дополнительные параметры для функции open() в Python
Функция open() может также принимать следующие необязательные параметры:
- buffering
- encoding
- errors
- newline
- closefd
- opener
Если вы хотите узнать больше об этих опциональных параметрах, можно заглянуть в документацию.
Решение
David099, режим "a" открывает файл на дозапись в конец файла. Что это значит? Что указатель в файле будет перемещен сразу в конец (читаем про метод tell), следовательно, читать уже нечего, следовательно, вывод функции print пустой.
Добавлено через 7 минут
В школе английскийI want eat '
Гугл переводчик сейчас переводит не хуже человека-переводчика (по крайне мере, тексты технического характера). Нейронные сети сделали свое дело.
Поставь себе QTranslate и переводи одним кликом через десяток онлайн-сервисов. Заодно таким способом и английский подтянешь, если будешь сопоставлять оригинал с переводом.
Пример перевода без всяких правок:
file - это подобный пути объект, задающий имя пути (абсолютное или относительное к текущему рабочему каталогу) открываемого файла или целочисленный файловый дескриптор файла, который нужно обернуть. (Если задан дескриптор файла, он закрывается, когда возвращаемый объект ввода-вывода закрывается, если для closefd не установлено значение False.)
mode - это необязательная строка, которая указывает режим, в котором открывается файл. По умолчанию используется значение «r», что означает «открыт для чтения в текстовом режиме». Другими общими значениями являются 'w' для записи (усечение файла, если он уже существует), 'x' для эксклюзивного создания и 'a' для добавления (что в некоторых системах Unix означает, что все записи добавляются в конец файла независимо от того, текущей позиции поиска). В текстовом режиме, если кодировка не указана, используемая кодировка зависит от платформы: вызывается locale.getpreferredencoding (False) для получения текущей кодировки локали. (Для чтения и записи необработанных байтов используйте двоичный режим и оставьте кодировку неуказанной.)
Быстрый отказ от ответственности . Я знаю, что кто-то опубликовал аналогичный вопрос несколько лет назад, но он не получил прямого ответа о том, почему его код не работал, и я не получил информацию, которую я искал для ответы. Также извините за мой плохой английский. Я сделал все возможное, чтобы это было понятно, но английский не мой родной язык.
Вы читаете файл f.read() , но вам необходимо присвоить содержимое переменной или распечатать ее или что-то еще. Python не будет печатать содержимое каждого файла, который вы читаете, только потому, что вы его читаете: вы должны указать ему, что делать с результатом.
Похоже, что программа просто читает файл, переданный в аргумент командной строки. Программа работает и читает файл, но вам нужна строка, чтобы Python распечатывал содержимое файла, который вы читаете. Попробуй это:
Для новичка в Python изучение анти-паттернов Python - это должен. Это позволяет избежать многих ошибок и ошибок. OP, очевидно, имеет опыт работы с другими языками программирования, но не знает лучшего способа работы в Python.
Если вы изучите анти-шаблон, вы узнаете, что with open() - лучший способ открыть файл. Сразу же вы обнаружите f в качестве обработчика файла, который не будет хранить никаких данных, пока вы не передадите данные из функции f.read() в другую переменную.
Использование sys.argv допустимо, но argparse настоятельно рекомендуется.
Вы читаете файл, но вам нужно присвоить содержимое некоторой переменной, или вы можете просто распечатать содержимое.
f = open("SampleTextFile_100kb.txt", "rt") здесь r для чтения и t для текстового файла
for x in f:
print(x)
Надеюсь это поможет.
Я настоятельно рекомендую подход @mootmoot с менеджером контекста. Это не только легче для чтения, но и для ловли исключений, когда файл не может быть прочитан по какой-либо причине. Если вы не хотите использовать контекстный менеджер, я бы посоветовал вам использовать команды try-кроме для вашей функции. Это небезопасно, если вы сделаете это, как предложил @ Adam Merki, потому что не будет никакой гарантии, что файл будет закрыт, если при чтении файла произойдет исключение.
В Python есть несколько способов прочитать текстовый файл. В этой статье мы рассмотрим функцию open() , методы read() , readline() , readlines() , close() и ключевое слово with .
Заключение
Итак, если вы хотите прочитать текстовый файл в Python, вам сначала нужно его открыть.
Если текстовый файл и ваш текущий файл, где вы пишете код, находятся в одной директории, можно просто указать имя файла в функции open() .
Если ваш текстовый файл находится в другом каталоге, вам необходимо указать правильный путь к нему.
Функция open() принимает необязательный параметр режима. Режим по умолчанию – чтение ( «r» ).
Чтобы проверить, можно ли прочитать текстовый файл, вы можете использовать метод readable() . Он возвращает True , если файл можно прочитать, или False в противном случае.
Метод read() будет читать все содержимое файла как одну строку.
Также, когда вы закончите читать файл, не забудьте закрыть его. Один из способов убедиться, что ваш файл закрыт, – использовать ключевое слово with . Оно закрывает файл автоматически и вам не нужно беспокоиться об этом.
Метод readline() будет считывать только одну строку из файла и возвращать ее.
Метод readlines() прочитает и вернет все строки в файле в виде списка.
Также для чтения содержимого файлов можно использовать цикл for .
Надеемся, вам понравилась эта статья. Желаем удачи в вашем путешествии по миру Python!
Считываем бинарный файл со строковыми данными в массив
Следующий скрипт поможет нам прочитать бинарник number_list.bin, созданный нами ранее.
Бинарный файл содержит список с числовыми данными. Как и в предыдущем примере, функция open() открывает файл и читает из него данные. Затем из бинарника читаются первые 5 чисел и перед выводом объединяются в список.
Синтаксис tofile()
Первый аргумент обязательный – он принимает имя файла, путь или строку. Файл создастся, только если будет указан первый аргумент. Второй аргумент – необязательный, он используется для разделения элементов массива. Третий аргумент также необязателен, он отвечает за форматированный вывод содержимого файла.
Что такое метод close() в Python?
Когда вы закончили читать файл, необходимо его закрыть. Если вы забудете это сделать, это может вызвать проблемы и дальнейшие ошибки.
Вот пример того, как закрыть файл demo.txt:
Заключение
Мы рассмотрели 3 разных способа чтения бинарных файлов. В первом примере мы получили содержимое файла в виде массива байтов, во втором и третьем – в виде списка.
Как использовать ключевое слово with в Python
Один из способов убедиться, что ваш файл закрыт, – использовать ключевое слово with . Это считается хорошей практикой, потому что файл закрывается не вручную, а автоматически. Более того, это просто крайне удобно и защищает вас от ошибок, которые могут возникнуть, если вы случайно забудете закрыть файл.
Давайте попробуем переписать наш пример, используя ключевое слово with :
Результат
После выполнения скрипта мы увидим следующий результат.
Binary1.py
Подготовка
Перед тем, как начать урок, желательно создать один или несколько бинарных файлов, чтобы воспользоваться скриптом из примера. Ниже представлены два скрипта на Python, которые создадут два бинарника. Файл binary1.py создаёт string.bin, содержащий строковые данные, а binary2.py – number_list.bin со списком из числовых данных.
Binary2.py
Читайте также: