【问题标题】:Previous and next line in text file文本文件中的上一行和下一行
【发布时间】:2016-04-09 20:21:15
【问题描述】:

如果我有按保存顺序排列的单词文件,则新行来自下面

word 1 
word 2 
word 3
word 4 
word 5 

现在如果我有一些单词,例如“单词 3”,如果文本文件中存在“单词 3”,请按列表顺序显示“单词 3”中的上一个或下一个单词。

data = open('D:\path\file.txt', "r")
searchlines = data.readlines()
for q_numb, line in enumerate(searchlines):
    if ('word 3') in line:
        for l in searchlines:
            prev_line = l[:+1]
            print ('"word 3" found:',line, 'previous of "word 3" is:',prev_line)
            break
data.close()

我的结果,但是错了,previous必须是“word 2”

"word 3" found: word 3
 previous of "word 3" is: word 1

如果我想在 current 之后的下一个单词,如何加上 plus?

我的加号结果:

"word 3" found: word 3
 previous of "word 3" is: w

我做错了什么?

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您的代码中存在一些问题,这应该可以:

    data = open('file.txt', "r")
    searchlines = data.readlines()
    for q_numb, line in enumerate(searchlines):
        if ('word 3') in line:
            prev_line = searchlines[q_numb - 1]
            print ('"word 3" found:',line, 'previous of "word 3" is:',prev_line)
            break
    data.close()
    

    发生了什么变化以及为什么?

    我想你不明白enumerate 的目的。你可以在这里阅读:https://docs.python.org/3.5/library/functions.html#enumerate。所以没有理由对列表进行两次迭代。枚举还提供(在您的示例中)当前行号。要获取上一行,您只需使用searchlines[q_numb - 1]。冒号用于对数组进行切片,您可以在此处阅读:Explain Python's slice notation

    【讨论】:

    • 知道了。我有一个无法解决的问题,也许你也可以帮助我解决这个问题。我收到了解决方案,它适用于部分目标和必须,但对我来说没有执行其他,可能是因为我做错了什么,或者因为我在 Windows 这里是stackoverflow.com/questions/36511550/…
    • @L_Oni 这不是 Stackoverflow 一般的工作方式,但我也试图帮助你解决这个问题 :)
    • 是的,是的,我知道,当我第一次发布它时,它是一个问题,但后来我把它分成了两个独立的问题,所以感谢您的支持
    【解决方案2】:

    如果您想打印上一个以及下一个如果有,这是一种技术:

    prev_word, next_word, do_print = None, None, False
    with open('file.txt','r') as f:
        for word in f:
            word = word.strip()
            if do_print:
                next_word = word
                break
            elif word == 'word 3':
                do_print = True
            else:
                prev_word = word
    
    if do_print:
        print(prev_word, 'word3', next_word)
    

    使用这种技术的多重优势:

    1. 文件是逐行读取的,内存占用不大
    2. 如果后面还有一行,循环将再执行 1 次迭代以捕获下一个单词
    3. 如果找到 'word3',将打印 2 或 3 个单词

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-12
      • 2013-11-04
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      相关资源
      最近更新 更多