Найти - Пользователи
Полная версия: Замена символов в нетекстовых файлах.
Начало » Python для новичков » Замена символов в нетекстовых файлах.
1 2 3 4
dnstuff
Здравствуйте!
Потребовалось заменить несколько слов в нетекстовом файле. В файле карты для навигатора если быть точным. Если открыть файл в 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()
Как заставить питона работать в этом случае?
Спасибо!
odnochlen
open(fname, ‘wb’). В твоем вопросе уже практически есть ответ.
dnstuff
Тогда вылезает вот такая ошибка:

Traceback (most recent call last):
File “C:\1\Wiki\re.py”, line 3, in <module>
data = open(“C1/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>
adray
читать нужно тоже в бинарном режиме и строковые литералы заменить на байтовые.
dnstuff
adray
читать нужно тоже в бинарном режиме и строковые литералы заменить на байтовые.
Т.е. в read добавить rb? А как заменить строковые литералы на байтовые?
adray
dnstuff
Т.е. в read добавить rb?
да
dnstuff
А как заменить строковые литералы на байтовые?
b'content'
odnochlen
Какая ветка питона?
py.user.next
dnstuff
re.sub("name1","name2",data)
достаточно bytes.replace()

>>> b'abcd'.replace(b'bc', b'bbcc')
b'abbccd'
>>>
dnstuff
Всем спасибо!
Конечный вариант
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()
dnstuff
Возникла проблема с синтаксисом в случае, когда в
output_file.write( re.sub(b"aaa",b"bbb",data)  )
заменяемые символы задаются не явно, а через переменные.
Если a=“aaa”, b=“bbb”, то как их вписать в re.sub(b“aaa”,b“bbb”,data)?
re.sub(b a, b b, data) выдает синтаксическую ошибку.
P.S. Питон 3.3
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB