首页 > 解决方案 > 删除包含关键字的行

问题描述

不久前我开始学习python。我玩了一款带有模组的游戏,它有很多我想要编辑的 .cfg 文件。确切地说,我想删除以特定关键字开头的行。我在这个论坛和其他论坛上读了很多书,但似乎人们的目标略有不同,这对我的情况不太适用。

这些配置文件有很多其他不同的配置。它跨越数百行。我只是将其剥离以使其更易于使用,直到我想出解决方案为止。

我想删除包含单词 ResourceCosts 的整行。

MODULE
{
    name = USI_SwapController
    ResourceCosts = SpecializedParts,8,MaterialKits,40,ElectricCharge,40    
}
MODULE

这是我发现有人发布的代码,它只是用空格替换了关键字 - RecourceCosts。这很可能会起作用,但在某些情况下,它可能会导致游戏崩溃或出现一些错误。我想删除包含这个词的整行。

key = "ResourceCosts"
with open("before.cfg", "rt") as fin:
    with open("after.cfg", "wt") as fout:
        for line in fin:
            fout.write(line.replace(key, ''))

我是否应该像 readlines() 一样将整个文件放在一个列表中。这是否意味着它将把所有东西都加载到内存中?

我在 python 方面并不完全是新手(和一般的编码),但我真的很感激一些建议,或者至少能引导我走上正确的轨道,在这种情况下我应该寻找什么。

谢谢!!

标签: python

解决方案


乔丹辛格+1。如果您担心内存占用,请改用 yield :

def read_config():
    key = "ResourceCosts"
    with open("before.cfg", "rt") as fin:        
        for line in fin:
            if key not in line: # Check the line for your key
                yield line

这将允许您独立处理每一行,而不必一次将整个文件读入内存。


If you want something more pythonic:

def read_config():
    with open('before.cfg', 'rt') as f:
        yield from filter(lambda line: key not in line, f)

推荐阅读