高效地重写简单的python代码

高效地重写简单的python代码,python,Python,我有以下代码,可能会重复。也就是说,我需要在代码的不同部分搜索整个日志文件,以查看其中是否存在两种特定的模式。我不能总是在代码开始时立即搜索模式 但基本上,下面是我所拥有的,我正在寻找优化它的方法。假设正在读取的日志文件可能非常大 textfile = open(logfile, 'r') filetext = textfile.read() textfile.close() matchesBegin = re.search(BeginSearchDVar, fi

我有以下代码,可能会重复。也就是说,我需要在代码的不同部分搜索整个日志文件,以查看其中是否存在两种特定的模式。我不能总是在代码开始时立即搜索模式

但基本上,下面是我所拥有的,我正在寻找优化它的方法。假设正在读取的日志文件可能非常大

    textfile = open(logfile, 'r')
    filetext = textfile.read()
    textfile.close()
    matchesBegin = re.search(BeginSearchDVar, filetext)
    matchesEnd = re.search(EndinSearchDVar, filetext)
    if matchesBegin is not None and matchesEnd is not None:
        LRangeA = SeeIfExactRangeIsFound()
        PatternCount = len(LRangeA)
        LRange = '\n'.join(LRangeA)

我知道可以使用with选项对其进行优化,但我不知道如何进行优化。

如果要进行优化,请使用

内存映射文件使用操作系统虚拟内存系统 直接访问文件系统上的数据,而不是使用 正常I/O功能。内存映射通常会改进I/O 性能,因为它不涉及单独的系统调用 每次访问都不需要在缓冲区之间复制数据–>内核和用户都可以直接访问内存 应用程序


如果文件确实很大,您可以更改第二个参数(要映射的字节大小),以更好地满足您的需要。

如果您正在寻找优化,请使用

内存映射文件使用操作系统虚拟内存系统 直接访问文件系统上的数据,而不是使用 正常I/O功能。内存映射通常会改进I/O 性能,因为它不涉及单独的系统调用 每次访问都不需要在缓冲区之间复制数据–>内核和用户都可以直接访问内存 应用程序


如果文件确实很大,您可以更改第二个参数(要映射的字节大小),以更好地满足您的需要。

谢谢!我不得不羞耻地承认,我对python还很陌生,所以你在这里键入的大部分内容看起来都很吓人。我可以问一下,我如何将它直接应用到我原来帖子中的代码中?替换
模式中的表达式。更改或重命名
日志文件
,并将其值设置为文件路径。计算总匹配项,如so
len(matches)
,您可能应该使用
if matches:
进行错误检查。在
for循环中
无论您试图用正则表达式捕获多少组,您都可以随心所欲。如果您需要帮助,请访问IRC频道;他们非常活跃,喜欢创建表达式。我刚刚试着在我的Unix ubuntu主机上运行这个。出现“AttributeError:exit”错误。我对此进行了研究,发现可能是因为您提供的格式是针对Windows操作系统的。你能帮我把你的代码修改成Unix专用的吗?谢谢!我不得不羞耻地承认,我对python还很陌生,所以你在这里键入的大部分内容看起来都很吓人。我可以问一下,我如何将它直接应用到我原来帖子中的代码中?替换
模式中的表达式。更改或重命名
日志文件
,并将其值设置为文件路径。计算总匹配项,如so
len(matches)
,您可能应该使用
if matches:
进行错误检查。在
for循环中
无论您试图用正则表达式捕获多少组,您都可以随心所欲。如果您需要帮助,请访问IRC频道;他们非常活跃,喜欢创建表达式。我刚刚试着在我的Unix ubuntu主机上运行这个。出现“AttributeError:exit”错误。我对此进行了研究,发现可能是因为您提供的格式是针对Windows操作系统的。你能帮我把你的代码修改成Unix专用的吗?
import mmap
import re

# Create pattern with all, ignore case, and multi line flags.
# search for every instance of `stackoverflow` within a sentence.
pattern =  re.compile( rb'(\.\W+)?([^.]?stackoverflow[^.]*?\.)',
                       re.DOTALL | re.IGNORECASE | re.MULTILINE )

# open file using 'with' which initializes and finalizes an instance
with open( log_file, "r" ) as file:
    # create new instance of mmap
    with mmap.mmap( file.fileno(), # fileno returns file descriptor for IO
                    0, # size in bytes for how much to map (if 0 then entire file)
                    access = mmap.ACCESS_READ # set access flag to read
                  ) as m: # name instance `m`
        matches = pattern.findall( m ) # find all patterns in mapped file
        print( "Matches: " + len( matches ) )
        for match in matches:
            print( match.group(0) )