Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2012 18:49:54

dnstuff
Зарегистрирован: 2012-11-05
Сообщения: 113
Репутация: +  1  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

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

Офлайн

#2 Ноя. 6, 2012 18:58:04

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

str() ты не замечаешь?
py.user.next предложил тебе конвертнуть строку в байты.

Короче:
замени все str на bytes и все строковые литералы на b''

Офлайн

#3 Ноя. 6, 2012 19:10:27

dnstuff
Зарегистрирован: 2012-11-05
Сообщения: 113
Репутация: +  1  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

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

Офлайн

#4 Ноя. 6, 2012 19:23:13

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

i=b'0'

Офлайн

#5 Ноя. 6, 2012 19:28:46

dnstuff
Зарегистрирован: 2012-11-05
Сообщения: 113
Репутация: +  1  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

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

Отредактировано dnstuff (Ноя. 6, 2012 19:52:01)

Офлайн

#6 Ноя. 6, 2012 20:14:52

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

Ы Как в тройке сконвертировать число в байтовую строку? Хрень какаето.

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

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

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

И да, тройка костылевата.

Офлайн

#7 Ноя. 6, 2012 20:27:48

dnstuff
Зарегистрирован: 2012-11-05
Сообщения: 113
Репутация: +  1  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

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

Отредактировано dnstuff (Ноя. 6, 2012 20:28:03)

Офлайн

#8 Ноя. 6, 2012 20:54:42

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

Дело скорее в том, что я тройку слабо знаю. Некоторые вещи в ней действительно гиморнее.

Может кто-то еще подскажет.

Офлайн

#9 Ноя. 6, 2012 20:56:59

dnstuff
Зарегистрирован: 2012-11-05
Сообщения: 113
Репутация: +  1  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

На 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’)

Офлайн

#10 Ноя. 6, 2012 21:07:39

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Замена символов в нетекстовых файлах.

Естественно, на ней str и bytes - это байтовая строка, а юникодная - unicode. И str.replace должно работать.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version