删除包含关键字的行

2024-10-01 19:15:37 发布

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

我刚开始学python。我用mods玩了一个游戏,它有很多.cfg文件我想编辑。确切地说,我想删除一行,以一个特定的关键字开始。 我在这个论坛和其他论坛上读了很多文章,但人们的目标似乎略有不同,这对我的案例不太适用。你知道吗

这些配置文件有许多其他不同的配置。它跨越数百条线。我只是把它剥离出来,让它更容易处理,直到我会想出一个解决方案。你知道吗

我想删除整行有一个词。你知道吗

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

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

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(以及一般的代码)还不是一个完全的新手,但是我真的很想得到一些建议,或者至少能指导我正确地了解在这种情况下应该寻找什么。你知道吗

谢谢你!!你知道吗


Tags: 文件key代码游戏aswith情况关键字
2条回答

乔丹·辛格+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

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


如果你想要更像Python的东西:

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

您可以简单地检查行中是否包含您的密钥

key = "ResourceCosts"
with open("before.cfg", "rt") as fin:
    with open("after.cfg", "wt") as fout:
        for line in fin:
            if key not in line: # Check the line for your key
                fout.write(line)

相关问题 更多 >

    热门问题