Форум сайта python.su
1
Здравствуйте!
Потребовалось заменить несколько слов в нетекстовом файле. В файле карты для навигатора если быть точным. Если открыть файл в hex-редакторе, некоторые слова вполне читаются, их и надо заменить. Но питон по умолчанию открывает файл как текстовый. Поэтому обычный скрипт по замене не работает.
import re output_file = open("1.img","w") data = open("2.img").read() output_file.write( re.sub("name1","name2",data) ) output_file.close()
Офлайн
14
open(fname, ‘wb’). В твоем вопросе уже практически есть ответ.
Офлайн
1
Тогда вылезает вот такая ошибка:
Traceback (most recent call last):
File “C:\1\Wiki\re.py”, line 3, in <module>
data = open(“C
1/Wiki/05010017.img”).read()
File “C:\python33\lib\encodings\cp1251.py”, line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)
UnicodeDecodeError: ‘charmap’ codec can't decode byte 0x98 in position 5414: cha
racter maps to <undefined>
Отредактировано dnstuff (Ноя. 5, 2012 18:56:12)
Офлайн
18
читать нужно тоже в бинарном режиме и строковые литералы заменить на байтовые.
Офлайн
1
adrayТ.е. в read добавить rb? А как заменить строковые литералы на байтовые?
читать нужно тоже в бинарном режиме и строковые литералы заменить на байтовые.
Офлайн
18
dnstuffда
Т.е. в read добавить rb?
dnstuff
А как заменить строковые литералы на байтовые?
b'content'
Офлайн
14
Какая ветка питона?
Офлайн
857
dnstuffдостаточно bytes.replace()re.sub("name1","name2",data)
>>> b'abcd'.replace(b'bc', b'bbcc') b'abbccd' >>>
Офлайн
1
Всем спасибо!
Конечный вариант
import re output_file = open("C:/1/Wiki/1.img","wb") data = open("C:/1/Wiki/2.img", "rb").read() output_file.write( re.sub(b"aaa",b"bbb",data) ) output_file.close()
Офлайн
1
Возникла проблема с синтаксисом в случае, когда в
output_file.write( re.sub(b"aaa",b"bbb",data) )
Отредактировано dnstuff (Ноя. 6, 2012 11:44:02)
Офлайн