Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2012 21:16:23

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

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

Как же теперь сделать, чтобы bytes(i) было четырехзначным?

Офлайн

#2 Ноя. 6, 2012 21:21:39

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

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

>>> str(1).rjust(4,'0')
'0001'

Офлайн

#3 Ноя. 6, 2012 21:27:04

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

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

Так у меня уже не str(i), а bytes(i). С ним rjust не работает. А если вернуться к str, то код не работает

Офлайн

#4 Ноя. 6, 2012 21:33:33

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

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

>>> bytes is str
True
На двойке bytes и str - байтовая строка, на тройке str - юникод.

Попробуй запустить свой первоначальный код для двойки, имхо он для нее и предназначен

Отредактировано odnochlen (Ноя. 6, 2012 21:34:37)

Офлайн

#5 Ноя. 7, 2012 00:58:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

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

dnstuff
Не понял. У Вас же одни строки, а не переменные.
>>> s = 'abcd'
>>> b = s.encode('latin1')
>>> s
'abcd'
>>> b
b'abcd'
>>>

dnstuff
import re
import glob
state = input("State: ")
code=input("Code: ")
state_path="C:/"+state+"/Setup/Sourse/*.img"
file_list = glob.glob(state_path)
i=0
for file in file_list:
	file_name=str(code)+str(i).rjust(4, '0')
	id='I04C72'+ str(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
так себе код:
1) для объединения путей используй os.path.join(), который знает про разделители путей в системе
2) не используй встроенные имена для переменных - id
3) для формирования строки используй str.format(), а не плюсики
4) открывай файлы с помощью with, указывая кодировку файла, либо закрывай файл по завершении работы (это хороший тон)
(если есть with, то файл закроется им автоматически)
5) запись в файл выполняется через print(), сделай help(print)
6) не используй re для простейших операций, так как его функции медленнее

dnstuff
id='I04C72'+ str(hex(i+80)[2:])
ident = 'I04C72{0:x}'.format(i + 80)

dnstuff
file_name=str(code)+str(i).rjust(4, '0')
file_name = '{0}{1:04}'.format(code, i)

лучше напиши задание



Отредактировано py.user.next (Ноя. 7, 2012 01:06:08)

Офлайн

#6 Ноя. 7, 2012 11:10:48

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

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

py.user.next
так себе код:
Да понятно, что так себе. Проще его переписать.

Офлайн

#7 Ноя. 7, 2012 11:12:02

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

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

py.user.next
ибо закрывай файл по завершении работы (это хороший тон)
В таком скрипте этим разве не можно пренебречь? Файл или скормится GC, или самое позднее закроется после завершения программы.

Офлайн

#8 Ноя. 7, 2012 11:52:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

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

odnochlen
В таком скрипте этим разве не можно пренебречь?
этот скрипт может быть перенесён в виде части в другой скрипт, может быть оформлен в виде функции
можно не заметить, что там нет закрытия файла, потому что перечитывать все фрагменты неудобно
поэтому всё это делается сразу



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version