为了账号安全,请及时绑定邮箱和手机立即绑定

如何从文本中的特定世界读取文本告诉python中文本文件中的下一个空间

如何从文本中的特定世界读取文本告诉python中文本文件中的下一个空间

函数式编程 2021-12-26 14:36:03
我有一个文本文件,其中包含交换机名称和每个交换机的端口,例如:switch 1[1] server 1[2] server 2[3] server 3[4] server 4 some text that no one need  switch 2 [1] server 1 [2] server 2 [3] server 3 [4] server 4现在我想要做的是拆分文本,当它读取开关 1 时拆分开始,当它读取一个空格或空行时停止,问题是我有一些文本,我在中间不需要任何帮助
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

如果我没看错,您希望保留以下所有行:

  1. 从单词开始 switch

  2. 跟随在以以下开头switch但在下一个空行之前的行之后

这不是太难:

keptlines = []

with open(myfile) as f:

    for line in f:

        if line.startswith('switch '):

            keptlines.append(line)

            for line in f:  # Continue iterating f for additional lines to keep

                if not line.rstrip():

                    break  # We hit an empty line, return to looking for switch

                keptlines.append(line)

如果您想将各种开关分开,则有多种不同的方法(例如,dict按开关编号键控,以lists 行作为值),但这是基本模式。


为了完整起见,有一种变体方法可以使用 来简化代码itertools,在文件顶部添加导入from itertools import takewhile并替换:


            for line in f:  # Continue iterating f for additional lines to keep

                if not line.rstrip():

                    break  # We hit an empty line, return to looking for switch

                keptlines.append(line)

只需:


            keptlines.extend(takewhile(str.rstrip, f))

类似的方法可以将外部循环推入dropwhile调用中,但这会变得非常复杂(您无法在dropwhile不丢失数据的情况下移除包装器,并且您必须为每个新switch块重新包装它),因此它可能不值得.


查看完整回答
反对 回复 2021-12-26
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信