Python - 将括号之间的内容读取为单个 'block'

标签 python

我正在尝试用 Python 编写一个程序,该程序对一段代码执行各种任务。其中大部分我都做过,但有一个让我困惑。我对行话的了解不够,无法有效地搜索有关此问题的帮助,因此我只能在这里提问。

我需要创建一个进程,将括号之间的任何内容作为单个“ block ”读取。然后,如果“ block ”包含特定单词或短语,Python 代码将删除它。

示例(简化)文本文件内容:

...
entity
{
    "id" "38794"
    "classname" "info_player_teamspawn"
}
entity
{
    "id" "38795"
    "classname" "func_detail"
    solid
}
entity
{
    "id" "38796"
    "classname" "path_track"
}
...

在此示例中,将列出数千个此类实体。我希望 python 代码删除任何包含“solid”一词的括号内的任何内容(包括“实体”前言),即: 这将是最终的结果:

...
entity
{
    "id" "38794"
    "classname" "info_player_teamspawn"
}
entity
{
    "id" "38796"
    "classname" "path_track"
}
...

不需要更正 ID。我们不需要担心这一点。

我希望我能很好地解释我的问题,并且希望有一个可能的解决方案。如果有人想要一个行话库,我可以用它来帮助解释或研究我可能遇到的任何进一步的问题,我也将不胜感激!

非常感谢!

最佳答案

首先,让我们编写一个生成器来生成标题(“实体”)及其各自的 block :

def blocks(filename):
    title, block = '', None
    with open(filename) as fp:
        for line in fp:
            if '{' in line:
                block = line
            elif block is not None:
                block += line
            else:
                title = line
            if '}' in line:
                yield title, block
                title, block = '', None

然后读取 block 并输出通过测试的 block :

for title, block in blocks('input.txt'):
    if 'solid' not in block:
        print title, block

关于Python - 将括号之间的内容读取为单个 'block',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930521/

相关文章:

python - statsmodels.formula.api 导入错误 ('cannot import name ' TimeSeries''。)

python脚本根据需要运行命令

python - 使用 pandas 按行值索引列值

使用 Sonarqube 和 Jenkins 的 Python 内存分析器

python - 名称错误 : global name 'is_sequence' is not defined

python - 首先按一个键的升序对字典列表进行排序,然后按另一个键的降序排列

python - CountVectorizer 忽略 'I'

python - 如何在 PyQt5 (5.13) 中启用 macOS 深色模式

python - 使用新的 "virtual"列保存基于类的 View 表单集项

python - 如何在python中测量算法的运行时间