Python - 类型错误:不可散列的类型:“列表” - 不可转义的字符?

问题描述 投票:0回答:1

因此,我尝试使用我希望其搜索的所有模式的列表来对文件进行迭代搜索。它返回一个 TypeError: unhashable type: 'list'

我正在搜索其中包含 IPv6 地址的 csv,所以我怀疑正在发生的事情是它在我的搜索模式中看到“:”,然后认为它是一本字典? 所以我想我必须转义 :,但我的谷歌搜索似乎发现 : 不再可以转义(从 3.7 开始)?或者我的谷歌-fu 这个周日晚上让我失望了。

Python 3.8

import re
from datetime import datetime


def count_matching_lines(filename, dvc_ptrns):
    count = 0
    with open(filename, 'r') as file:
        for line in file:
            for pattern in dvc_ptrns:
                if re.search(pattern, line):
                    count += 1
                    print(count)
    return count


## Define paths
devpath = f'/home/user'
rootpath = devpath

# Get current date for logging
current_date = datetime.now().strftime('%Y%m%d')

# File paths
filtered_file = f'{rootpath}/filtered{current_date}.csv'


filename = filtered_file  # Replace with your file


ptrn_print = '2022:28'
ptrn_wlsap = ['2022:34e','2022:34f']
dvc_ptrns = [ptrn_print, ptrn_wlsap]

count = count_matching_lines(filename, dvc_ptrns)


print("Number of matching lines:", count)

编辑:忘记添加错误

Traceback (most recent call last):
  File "ipv6_dev_count.py", line 36, in <module>
    count = count_matching_lines(filename, dvc_ptrns)
  File "ipv6_dev_count.py", line 12, in count_matching_lines
    if re.search(pattern, line):
  File "/usr/local/lib/python3.8/re.py", line 201, in search
    return _compile(pattern, flags).search(string)
  File "/usr/local/lib/python3.8/re.py", line 294, in _compile
    return _cache[type(pattern), pattern, flags]
TypeError: unhashable type: 'list'
python regex
1个回答
0
投票

发生错误的原因是您试图将一个列表 (

ptrn_wlsap
) 包含在另一个列表 (
dvc_ptrns
) 中。当您迭代 dvc_ptrns 时,
re.search
函数期望每个模式都是一个字符串,但它遇到的是一个列表。

dvc_ptrns = [ptrn_print] + ptrn_wlsap
© www.soinside.com 2019 - 2024. All rights reserved.