Как прекратить добавление возврата каретки к выводу моего файла в Python? - PullRequest
4 голосов
/ 18 августа 2011

Я пытаюсь проанализировать файл BMP, внести некоторые изменения и затем собрать новый BMP с помощью Python.

Возврат каретки кажется огромной проблемой. Когда я открываю файл растрового изображения с помощью Notepad ++ и ищу "\r', символ не существует. Я читаю файл на Python (readData = fileIn.read ()) и пытаюсь найти, используя readData.find('\r'), он возвращает -1. Поиск "\n" работает нормально. Пока все хорошо.

Когда я пытаюсь записать точно такой же блок текста в новый BMP, используя fileOut.write(readData), и я использую Notepad ++ для поиска "\r", я могу найти его (дважды, каждый из которых соответствует существующему "\n" символы).

Есть ли способ записать этот блок данных в новый BMP без автоматического добавления "\r"? Я пытался применить .strip() и .replace('\r','') к строке перед записью в новый файл.

Ответы [ 2 ]

8 голосов
/ 18 августа 2011

Вы, вероятно, открываете файл как текст (по умолчанию), когда хотите открыть его как двоичный файл.

open("example.bmp", "rb") # to [r]ead as [b]inary
open("example.bmp", "wb") # to [w]rite as [b]inary

С документация :

По умолчанию используется текстовый режим, который может преобразовывать символы '\n' в платформенное представление при записи и обратно при чтении. Таким образом, при открытии двоичного файла вы должны добавить 'b' к значению режима, чтобы открыть файл в двоичном режиме, что улучшит переносимость.

1 голос
/ 18 августа 2011

Вы открываете файл в текстовом режиме, в то время как вам нужен двоичный режим. Узнайте больше об open () здесь: http://docs.python.org/library/functions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...