python - 删除包含关键字的行
问题描述
不久前我开始学习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 方面并不完全是新手(和一般的编码),但我真的很感激一些建议,或者至少能引导我走上正确的轨道,在这种情况下我应该寻找什么。
谢谢!!
解决方案
乔丹辛格+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)
推荐阅读
- c# - 在不同目录中存储/使用 WPF App.config
- powershell - 如何将 powershell 输出字符串中的字符串作为参数传递给 get-content / cat(直接)?
- arduino - 如何停止 if 条件?
- c# - C# 将 DateTime 偏移量添加到大型集合中的 DateTime 属性
- python - 熊猫:如何用条件(字符数)连接行?
- node.js - 如何从端点创建 GraphQL 枚举?
- python - 在 Python 中创建一个从常量向上和向下递增的列表
- excel - 如何将 xlsx 电子表格中的特定工作表提取为文本文件?
- javascript - 使用 Javascript 更改 Firefox 插件 DOM 元素
- python-3.x - lavalink.py 播放本地文件