gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:24:50 24 4
gpt4 key购买 nike

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

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

数据文件示例:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com