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

2024-04-19 15:25:55 发布

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

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

如何只打印那些带有下划线且后面有数据的名称/字符串?你知道吗

数据文件示例:

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

Tags: 文件数据字符串in标记名称falsematch
1条回答
网友
1楼 · 发布于 2024-04-19 15:25:55

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

下面是保留最后一行文本的示例实现。如果文本后面有一行包含'—————————————————————————',它将被标记为标题行,否则它将被视为数据行并打印最后一个标题。你知道吗

由于您在评论中提到您的数据源自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\u Dorito的例子演示代码。你知道吗

相关问题 更多 >