2015-08-02 2 views
0

У меня есть требование добавить 2 строки, которые в формате mac, как hex, который имеет 9 октетов. Как часть этого, я достиг почти, но одна последняя вещь в ожидании - получить значение в двузначном формате.Получить строку в двузначном формате с ведущими нулями в python

string1= "aa.aa.aa.aa.aa.aa.aa.aa.ff" 
string2= "00.00.00.00.00.00.00.00.01" 

, когда я добавляю эти 2 из положить я получаю aa.aa.aa.aa.aa.aa.aa.ab.0, но я хочу значение быть aa.aa.aa.aa.aa.aa.aa.ab.00. (2 нули).

Я попытался с помощью

temp = '%02d' % string3 

но я получил ошибку

TypeError: %d format: a number is required, not str 

, как я пытаюсь сделать это с помощью строки.

+0

Где б происходит от «? –

+0

Вы пытались преобразовать эту строку в int? – raymelfrancisco

+0

Как вы добавляете две строки? –

ответ

1

Вы можете разделить строку, пэд каждая часть с ведущими нулями и присоединиться к ней снова:

s = "aa.aa.aa.aa.aa.aa.aa.ab.0" 
print '.'.join(["{0:0>2}".format(w) for w in s.split('.')]) 

Выход:

aa.aa.aa.aa.aa.aa.aa.ab.00 

(. Обивка основан на this answer)


Даже более короткая версия, основанная на map:

print '.'.join(map("{0:0>2}".format, s.split('.'))) 
+0

Большое вам спасибо Falko. Это сработало. Какой из них лучше среди обоих методов? Набивка или карта? –

+0

Функция 'format' выполняет добавление. Таким образом, разница заключается в использовании функции [list comprehension] (http://www.secnetix.de/olli/Python/list_comprehensions.hawk) или функции «map». На мой взгляд, не имеет значения, какой из них использовать здесь. С помощью 'map' вы сохраняете временную переменную, которая может улучшить читаемость. – Falko

0

Вместо того, чтобы фиксировать полученный результат string3, вы можете улучшить способ его создания. Если преобразовать слагаемые в целые числа, добавить их и преобразовать результат обратно в шестнадцатеричном представлении, вам не придется беспокоиться о пропавших без нулей:

a = "aa.aa.aa.aa.aa.aa.aa.aa.ff" 
b = "00.00.00.00.00.00.00.00.01" 
c = hex(int(a.replace('.', ''), 16) + int(b.replace('.', ''), 16))[2:-1] 
print '.'.join(i+j for i,j in zip(c[::2], c[1::2])) 

Выходные:

aa.aa.aa.aa.aa.aa.aa.ab.00 

Ссылки:

+0

Это потрясающе. Для этого у меня есть около 15 строк кода. но вы сделали всего 3 строки ... Гений. Еще раз спасибо. –

Смежные вопросы