Найти - Пользователи
Полная версия: Замена символов в нетекстовых файлах.
Начало » Python для новичков » Замена символов в нетекстовых файлах.
1 2 3 4
dnstuff
file_name=str(code)+str(i).rjust(4, ‘0’) - формирует строку вида (1234-это переменная code, которая вводится пользователем, плюс четырехзначный счетчик 0001, 0002, …..)
Эта строка используется дважды: как название для выходного файла и для замены переменной Id в этом же файле.
Что мне предложил py.user.next я не понял и попросил его уточнить.
Про спецсимволы не в курсе.
odnochlen
str() ты не замечаешь?
py.user.next предложил тебе конвертнуть строку в байты.

Короче:
замени все str на bytes и все строковые литералы на b''
dnstuff
import re
import glob
state = input("State: ")
#code=input("Code: ")
code=b'0803'
state_path="C:/1/USA/"+state+"/Setup/Sourse/*.img"
file_list = glob.glob(state_path)
i=b'0'
for file in file_list:
	file_name=bytes(code)+bytes(i)
	id=b'I04C72'+ bytes(hex(i+80)[2:])
	output_file = open(file_name,"wb")
	data = open(file, "rb").read()
	output_file.write( re.sub(id, file_name, data)  )
	output_file.close()
	i=i+1

Тогда такая ошибка:

Traceback (most recent call last):
File “C:\1\Wiki\Img.py”, line 11, in <module>
id=b'I04C72'+ bytes(hex(i+80))
TypeError: can't concat bytes to int
odnochlen
i=b'0'
dnstuff
odnochlen
i=b'0'
Если этим вы хотели сказать , что надо писать i=0, то я и так пробовал.
Ошибка вылезает еще раньше. На строке file_name=bytes(code)+bytes(i)

Может можно как-то сконвертировать в бинарный вид две переменные конкретно для строки output_file.write( re.sub(id, file_name, data) ) ?
С этим bytes() весь код надо переделывать. Например rjust(4, ‘0’) перестает работать, я это пока убрал.

Не, виноват, ковычку одну не убрал. При i=0 ошибка TypeError: string argument without an encoding
odnochlen
Ы Как в тройке сконвертировать число в байтовую строку? Хрень какаето.

Можно сделать так, как пуузернекст написал, но долго.

dnstuff
Например rjust(4, ‘0’) перестает работать, я это пока убрал.
b'0'.

Короче, за тебя придется писать весь код.

И да, тройка костылевата.
dnstuff
Блин, может проще другой питон поставить? Мне не принципиально. Код пишу для облегчения собственной рутины.
А как в 2.7 сконвертировать число в байтовую строку?
odnochlen
Дело скорее в том, что я тройку слабо знаю. Некоторые вещи в ней действительно гиморнее.

Может кто-то еще подскажет.
dnstuff
На 2.7 сразуже заработал такой код:
import re
import glob
state = raw_input("State: ")
code=raw_input("Code: ")
state_path="C:/1/USA/"+state+"/Setup/Sourse/*.img"
file_list = glob.glob(state_path)
i=0
for file in file_list:
	file_name=bytes(code)+bytes(i)
	id=b'I04C72'+ bytes(hex(i+80)[2:])
	output_file = open(file_name,"wb")
	data = open(file, "rb").read()
	output_file.write( re.sub(id, file_name, data)  )
	output_file.close()
	i=i+1
Вопрос только, как мне теперь обратно вернуть четырехзначный счетчик, который был реализован как rjust(4, ‘0’)
odnochlen
Естественно, на ней str и bytes - это байтовая строка, а юникодная - unicode. И str.replace должно работать.
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