首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3.2中MAC地址的优雅格式

Python 3.2中MAC地址的优雅格式
EN

Stack Overflow用户
提问于 2012-06-13 08:29:28
回答 8查看 15.1K关注 0票数 11

我正在寻找一种使用冒号格式化MAC地址的更优雅的解决方案。我使用的是Python 3.2。也许是一个花哨的列表理解?

代码语言:javascript
复制
s=""
h="00233a990c21"
for i in range(0,12,2):
    s += h[i:i+2] + ":"
s=s[:-1]
print("s=",s)
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-06-13 08:39:26

您的代码很容易转换为一种理解形式:

代码语言:javascript
复制
':'.join(h[i:i+2] for i in range(0,12,2))
票数 17
EN

Stack Overflow用户

发布于 2015-04-04 19:55:32

这不是最短的解决方案,但它接受所有常见类型的mac格式作为输入。它还会执行一些验证检查。

代码语言:javascript
复制
import re

def format_mac(mac: str) -> str:
    mac = re.sub('[.:-]', '', mac).lower()  # remove delimiters and convert to lower case
    mac = ''.join(mac.split())  # remove whitespaces
    assert len(mac) == 12  # length should be now exactly 12 (eg. 008041aefd7e)
    assert mac.isalnum()  # should only contain letters and numbers
    # convert mac in canonical form (eg. 00:80:41:ae:fd:7e)
    mac = ":".join(["%s" % (mac[i:i+2]) for i in range(0, 12, 2)])
    return mac

以下是mac地址字符串的列表,以及它们将被视为有效还是无效:

代码语言:javascript
复制
'008041aefd7e',  # valid
'00:80:41:ae:fd:7e',  # valid
'00:80:41:AE:FD:7E',  # valid
'00:80:41:aE:Fd:7E',  # valid
'00-80-41-ae-fd-7e',  # valid
'0080.41ae.fd7e',  # valid
'00 : 80 : 41 : ae : fd : 7e',  # valid
'  00:80:41:ae:fd:7e  ',  # valid
'00:80:41:ae:fd:7e\n\t',  # valid

'aa:00:80:41:ae:fd:7e',  # invalid
'0:80:41:ae:fd:7e',  # invalid
'ae:fd:7e',  # invalid
'$$:80:41:ae:fd:7e',  # invalid

所有有效的值都将以规范的形式返回:

代码语言:javascript
复制
'00:80:41:ae:fd:7e'
票数 6
EN

Stack Overflow用户

发布于 2020-05-08 07:22:50

代码语言:javascript
复制
from netaddr import EUI, mac_unix_expanded
print(EUI('00:01:02:03:04:05', dialect=mac_unix_expanded))
print(EUI('1-2-3-4-5-6', dialect=mac_unix_expanded))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11006702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档