【问题标题】:Find one line and get the next lines找到一行并获取下一行
【发布时间】:2017-07-11 07:44:18
【问题描述】:

通过这段代码,我得到了包含Name 的完整行。但我需要得到这条线和接下来的两条线。我不知道我该怎么做。

def daten(s): 
for i in s:  
       if i.find('Name') >= 1:
             daten = i
             return daten

例子:

AAA 
Name 
CCC 
DDD
EEE

我想得到NameCCCDDD

【问题讨论】:

  • s是什么类型?
  • 提供的代码在示例数据中没有找到Name。 (也有缩进语法错误。)
  • 欢迎来到Stack Overflow!请edit您的问题包含一个简短的完整程序来演示该问题。请包括预期输出和复制粘贴实际输出。请参阅minimal reproducible example 了解更多信息。

标签: python find return line next


【解决方案1】:

这是另一种解决方案 - 如果 s 是一个文件:

def daten(s):
    with open(s, 'r') as f: lines = f.read().splitlines()
    for i,line in enumerate(lines): 
        if 'Name' in line: return lines[i:i+3]

它在任何行中搜索单词“Name”,如果找到它 - 返回一个包含该单词和后面两个单词的列表。

【讨论】:

  • 是什么让你认为这与文件有关?
  • @ScottHunter,我想是这样 - 示例输入看起来像一个文件...... - 但你是对的,只是将我的答案编辑得更具体!
【解决方案2】:

如果s 还不是迭代器,您可以将其设为迭代器,然后调用next 以获取包含'Name' 的行之后的下两行:

def daten(s): 
   s = iter(s)
   for line in s:  
       if line.startswith('Name'): # or more generally: if 'Name' in line: ...
            return [line, next(s), next(s)]
   else:
       raise SomeException

如果没有包含 name 的行,或者后面没有以 'Name' 开头的行,则会出现异常。

【讨论】:

  • 使用 startswith 与原始代码的行为不匹配(这可能不是想要的,但仍然......)
【解决方案3】:

如果s 是一个列表,那么这将匹配您的代码所做的但返回所需的元素:

def daten(s):
    for i,d in enumerate(s):
        if d.find('Name')>=0:
            return s[i:i+3]

注意这个

  • 不适用于您的示例数据,但您的代码也没有
  • 如果未找到任何内容,则不会返回任何内容,但您的代码也没有返回任何内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-29
    • 2021-05-28
    • 2021-11-30
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多