Python Windows throws AttributeError: 'NoneType' object has no attribute 'group'

Python Windows throws AttributeError: 'NoneType' object has no attribute 'group'

这是我文件的头部样本:

1.1.1.0 - 1.1.1.255
2.2.2.0 - 2.2.2.255
3.3.3.0 - 3.3.3.100

这是我的 Python 正则表达式代码:

regex = r'(?P<start>\w+\.\w+\.\w+\.\w+) \- (?P<end>\w+\.\w+\.\w+\.\w+)'
with open('sorted_french_ips.txt', 'r') as file:
    with open('sorted_french_edited_ips.txt', 'a') as sorted_french_edited_ips:
        for line in file:
            find = re.match(regex, line)
            start = find.group('start')
            end = find.group('end')
            cidr = netaddr.iprange_to_cidrs(start, end)
            cidr = str(cidr)
            cidr = cidr.replace(', IPNetwork', '\n')
            cidr = cidr.replace('[IPNetwork(\'', '')
            cidr = cidr.replace('\')]', '')
            cidr = cidr.replace('(\'', '')
            cidr = cidr.replace('\')', '')
            sorted_french_edited_ips.write(f'{cidr}\n')

当我在 Windows 中 运行 这段代码时,我得到这个错误:

Traceback (most recent call last):
  File "C:\Users\Saeed\Desktop\python-projects\win.py", line 131, in <module>
    write()
  File "C:\Users\Saeed\Desktop\python-projects\win.py", line 81, in write
    start = find.group('start')
AttributeError: 'NoneType' object has no attribute 'group'

但是如果我 运行 在 Linux 中使用相同的代码,它工作正常。

为什么我在 Windows 中出现错误? Window 的正则表达式和 Linux 有什么不同吗?是否应该更改?

您的输入文本文件是用字节顺序标记 BOM 编码的 Unicode。在Windows中打开Python文件时,默认使用系统编码,不同于Unicode,将BOM字节序列作为文本的一部分读入。

如果匹配出现在字符串的开头,re.match function 只会找到匹配项。

第一个line不是以您定义的模式开头,而是以BOM顺序开头。

要解决此问题,请确保您使用正确的编码读取文件。

如果您的文件是 UTF-8 BOM 编码,请使用

with open('sorted_french_ips.txt', 'r', encoding="utf-8-sig") as file:

在 Linux 中, 通常 ,默认编码是没有 BOM 的 UTF-8,因此它可以在不显式设置 encoding 参数的情况下工作。