У меня есть такой список:
list1 = [ '000c.29e6.8fa5', 'fa16.3e9f.0c8c', 'fa16.3e70.323b' ]
Я собираюсь преобразовать их в mac-адреса в формате 00:0C:29:E5:8F:A5
в верхнем регистре.
Как мне это сделать?
Я погуглил, но ничего не нашел. Я тоже думал как сделать, но пока понятия не имею.
Я знаю только это:
for x in list1:
x = x.replace('.', '').upper()[::1]
Я знаю [::1]
шпагат, но не уверен, правильно ли это и смогу ли я продолжать это делать или нет.
Вы можете использовать join()
и range()
:
def get_converted(L):
res = []
for s in L:
s = s.replace('.', '').upper()
res += [':'.join([s[i:i + 2] for i in range(0, 12, 2)])]
return res
print(get_converted(['000c.29e6.8fa5', 'fa16.3e9f.0c8c', 'fa16.3e70.323b']))
['00:0C:29:E6:8F:A5', 'FA:16:3E:9F:0C:8C', 'FA:16:3E:70:32:3B']
Другой способ, используя bytes.fromhex()
и bytes.hex()
:
>>> [":".join(bytes([b]).hex() for b in bytes.fromhex(l.replace(".", ""))) for l in list1]
['00:0c:29:e6:8f:a5', 'fa:16:3e:9f:0c:8c', 'fa:16:3e:70:32:3b']
Естественно, если вам нужны заглавные буквы, добавьте их в конце.
>>> [":".join(bytes([b]).hex() for b in bytes.fromhex(l.replace(".", ""))).upper() for l in list1]
['00:0C:29:E6:8F:A5', 'FA:16:3E:9F:0C:8C', 'FA:16:3E:70:32:3B']
Другой шестнадцатеричный способ:
[bytes.fromhex(s.replace('.', '')).hex(':').upper()
for s in list1]