python3.6.1 |对具有特殊字符的文件的Regex搜索

2024-10-01 04:57:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我打算怎么做?

在Windows文件系统上的一组文件中执行一个按字母顺序排列的字符串列表的搜索(大约25K个不同大小和扩展名的文件,主要是平面文本文件,最大的文件大小不超过几MB)

我做了什么?

for each_file in files:
    file_read_handle = open(each_file,"rb")
    file_read_handle.seek(0) #ensure you're at the start of the file
    first_char = file_read_handle.read(1) #get the first character
    if first_char:
        file_read_content_mappd = mmap.mmap(file_read_handle.fileno(), 0, access=mmap.ACCESS_READ)
        if re.search(br'(?i)T_0008X_WEB', file_read_content_mappd):
            file_write_content = ('Text T_0008X_WEB found in {}'.format(each_file))
            file_write_handle.write(file_write_content)     
            file_write_handle.write("\n")
file_write_handle.close()

这段代码对于在二进制模式下打开的文件中的文本搜索(参见第T_0008X_WEB行)非常有效,可以避免unicodedecoderror:“charmap”编解码器无法解码776位字节0x9d:字符映射到未定义的错误。在

然而,当试图搜索一个值列表时,将硬编码值替换为这样一个变量-if re.search('br\'(?i)' + regex_search_str_byte + '\'', file_read_content_mappd):,却面临以下问题-

  1. 使用时:re.search('br\'(?i)' + regex_search_str + '\'', file_read_content_mappd):出现错误:文件是二进制的,搜索文本是字符串类型
  2. 使用时:re.search(regex_search_str_byte, file_read_content_mappd):出现问题:没有找到匹配项,因为即使正则表达式字符br'(?i) 也被视为字节转换搜索文本的一部分

关于如何在二进制模式下打开文件读取时执行字节转换文本正则表达式搜索值列表的指南?


Tags: 文件the文本brre列表readsearch
1条回答
网友
1楼 · 发布于 2024-10-01 04:57:42

使用

re.search(regex_search_str_byte, file_read_content_mappd, flags=re.I)

re.I标志可以作为参数传递给re.search方法。br前缀不是必需的,因为它们用于修改字符串文本,而您使用的是一个变量。在

相关问题 更多 >