TypeError:预期的字符串或缓冲区python re.search

时间:2019-07-14 17:49:42

标签: python regex

我正在尝试创建一个项目,该项目扫描我的网络中的MAC地址,并允许它们或禁止它们在我的本地网络中使用。我编写此脚本是为了熟悉re和pynetgear模块以完成此操作,因为我计划使用这些地址存储数据以确定哪个设备是哪个设备。我尝试过的所有方法都不起作用,或者我尝试在此处和其他资源上查找问题,但到目前为止,还没有人帮助过我。

我尝试查看正则表达式的文档,但无法弄清楚这个问题是什么。一直到设备的第一个代码都在其MAC正常工作,称为TypeError。

from pynetgear import Netgear
import re

netgear = Netgear(password='password')

devices = netgear.get_attached_devices()

MAC = re.search(r"mac=..:..:..:..:..:..", devices)
print(MAC.group(0))

Traceback (most recent call last):
  File "/home/z33k/Desktop/python/adhdResearch.py", line 8, in <module>
    MAC = re.search(r"mac=..:..:..:..:..:..", devices)
  File "/usr/lib/python2.7/re.py", line 146, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or buffer

2 个答案:

答案 0 :(得分:2)

我认为您根本不需要正则表达式。

根据PyNetgear docsget_attached_devices返回一个命名元组列表。您将需要遍历列表并打印mac值:

for item in devices:
    print(item.mac)

答案 1 :(得分:0)

re.search需要一个字符串或缓冲区,但是devices是一个包含namedtuple的列表。

您可以在源代码中看到自己的内容:

https://github.com/MatMaul/pynetgear/blob/247d6b9524fcee4b2da0e65ca12c52ebdd3676b2/pynetgear/init.py#L46-L49

https://github.com/MatMaul/pynetgear/blob/247d6b9524fcee4b2da0e65ca12c52ebdd3676b2/pynetgear/init.py#L224-L241

打印出MAC地址:

for device in devices: print(device.mac)

不幸的是,关于允许或禁止个人地址,我不知道。