猿问

使用Python 3优化删除线

我目前正在尝试从大型文本文件中删除大多数行,并将所选信息重写为另一个。我必须逐行阅读原始文件,因为这些行出现的顺序是相关的。到目前为止,我能想到的最好的方法是只拉相关的行,并使用类似以下内容的方法重写它们:


with open('input.txt', 'r') as input_file:

    with open('output.txt', 'w') as output_file:


        # We only have to loop through the large file once

        for line in input_file:


            # Looping through my data many times is OK as it only contains ~100 elements

            for stuff in data:


                    # Search the line

                    line_data = re.search(r"(match group a)|(match group b)", line)


                    # Verify there is indeed a match to avoid raising an exception.

                    # I found using try/except was negligibly slower here

                    if line_data:

                        if line_data.group(1):

                            output_file.write('\n')


                        elif line_data.group(2) == stuff:

                            output_file.write('stuff')



        output_file.close()

    input_file.close()

但是,使用〜1Gb文件和〜120,000条匹配的行,该程序仍需要花费约8个小时才能运行。我相信瓶颈可能涉及到正则表达式或输出位,因为完成此脚本所花费的时间与行匹配数成线性比例。


我曾尝试先将输出数据存储在内存中,然后再将其写入新的文本文件,但快速测试表明它以与之前写入数据大致相同的速度存储数据。


如果有帮助,我有一个Ryzen 5 1500和8Gb的2133 Mhz RAM。但是,我的RAM使用率似乎从未达到上限。


呼啦一阵风
浏览 184回答 2
2回答
随时随地看视频慕课网APP

相关分类

Python
我要回答