因此,我尝试使用我希望其搜索的所有模式的列表来对文件进行迭代搜索。它返回一个 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'
发生错误的原因是您试图将一个列表 (
ptrn_wlsap
) 包含在另一个列表 (dvc_ptrns
) 中。当您迭代 dvc_ptrns 时,re.search
函数期望每个模式都是一个字符串,但它遇到的是一个列表。
dvc_ptrns = [ptrn_print] + ptrn_wlsap