您好,我正在运行这段python代码,以将多行模式减少为单例模式.然而,我正在对200,000多行的超大文件执行此操作.

以下是我当前的代码:

import sys
import re

with open('largefile.txt', 'r+') as file:
    string = file.read()
    string = re.sub(r"((?:^.*\n)+)(?=\1)", "", string, flags=re.MULTILINE)
    file.seek(0)
    file.write(string)
    file.truncate()

问题是re.sube()在我的大文件上占用了很长时间(10M以上).有没有可能以任何方式加快这一进程?

输入文件示例:

hello
mister
hello
mister
goomba
bananas
goomba
bananas
chocolate
hello
mister

输出示例:

hello
mister
goomba
bananas
chocolate
hello
mister

这些图案也可以大于2条线.

推荐答案

在量词中嵌套量词的代价很高,在本例中也是不必要的.

您可以使用以下不嵌套的正则表达式:

string = re.sub(r"(^.*\n)(?=\1)", "", string, flags=re.M | re.S)

在下面的测试中,与您的方法相比,它将时间减少了一半以上:

https://replit.com/@blhsing/HugeTrivialExperiment

Python相关问答推荐

将输入管道传输到正在运行的Python脚本中

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

如何从.cgi网站刮一张表到rame?

pyscript中的压痕问题

如何在WSL2中更新Python到最新版本(3.12.2)?

SQLAlchemy Like ALL ORM analog

driver. find_element无法通过class_name找到元素'""

Pandas—在数据透视表中占总数的百分比

未知依赖项pin—1阻止conda安装""

python中的解释会在后台调用函数吗?

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

以逻辑方式获取自己的pyproject.toml依赖项

polars:有效的方法来应用函数过滤列的字符串

如何使用Azure Function将xlsb转换为xlsx?

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

Polars时间戳同步延迟计算

用由数据帧的相应元素形成的列表的函数来替换列的行中的值

如何将django url参数传递给模板&S url方法?

跨两个数据帧收集非索引列上的公共组

搜索结果未显示.我的URL选项卡显示:http://127.0.0.1:8000/search?";,而不是这个:";http://127.0.0.1:8000/search?q=name";