python - 如果Python中没有数据或空行,如何删除带下划线的字符串/名称

标签 python python-3.x

我的文件中有一些数据,其中很少有名称或字符串标记为下划线,但它们下面没有任何数据,而是有空格/空白行,因为下划线下面也有数据的行。

如何仅打印那些后面带有数据的带下划线的名称/字符串?

数据文件示例:

toran
—————————————————————————


nscld
—————————————————————————


polkit
—————————————————————————


ganter
—————————————————————————
tcp        0      0 D
tcp        0      0 D
tcp        0      0 D

polkit
—————————————————————————

在上面的文件中我只需要:

ganter
—————————————————————————
tcp        0      0 D
tcp        0      0 D
tcp        0      0 D

尝试了下面的代码,但它没有按预期工作,因为它无法获取字符串/名称,只能获取数据。

patt_match = False
with open("tran", "r") as lb:
   for line in lb:
     if '—————————————————————————' in line:
         patt_match = False

     elif 'tcp' in line:
         patt_match = True
         line = line.strip()
         print(line)

实际输出:

tcp        0      0 D
tcp        0      0 D
tcp        0      0 D

最佳答案

问题在于,您只能在到达数据行后才确定是否需要打印标题。这意味着您需要保留变量中的最后一个标题,并在第一次出现数据行之前打印它。

下面是保留最后一行文本的示例实现。如果文本后跟包含 '----------------------------------------------------------------------------------------' 的行,则会将其标记为标题行,否则它将被视为数据行并打印最后一个标题。

由于您在评论中提到您的数据源自 Windows,因此我添加了一行以从您的行中删除所有尾随回车符。这对于没有它们的文件也可以正常工作:

with open('tran', 'r') as f:
    prev_line = ''  # Not strictly necessary, but avoids some warnings
    for line in f:
        line = line.rstrip('\r')
        if '—————————————————————————' in line:
            heading = prev_line
        elif line.startswith('tcp'):
            if '—————————————————————————' in prev_line:
                print(heading)
                print(prev_line)
            print(line)
        prev_line = line

这将跳过各部分之间的换行符,但您可以包含以下内容:

elif not line and prev_line.startswith('tcp'):
    print(line)

这是一个IDEOne Link使用 @Flaming_Dorito 的示例演示代码。

关于python - 如果Python中没有数据或空行,如何删除带下划线的字符串/名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50515266/

相关文章:

Django 在尝试创建 postgresql 数据库时抛出 "[12728] ERROR: CREATE DATABASE cannot run inside a transaction block"

python - 如何获取Pyqt5表格小部件中的行和列位置(通过鼠标事件突出显示)?

Python:使用 os.environ.get 时出现 TypeError

使用 Protocol Buffer 的 Python 项目,部署问题

Python属性错误: 'Series' object has no attribute 'isdigit'

python - pandas 创建一个列并从字典中为其赋值

python-3.x - 使用 "deployment targets"创建堆栈实例时出现 boto3 错误

python - 将变量分配给 pyserial 端口

python - 根据列值删除 Pandas 中的 DataFrame 行

python - 如何从 MIDI 文件中提取单个和弦、休止符和音符?