繁体   English   中英

使用 readline() 读取整行,然后使用 Python 移动到下一个 in.txt 文件,每次后续运行

[英]Using readline() to read a full line then move onto the next one in .txt file with each subsequent run using Python

我对 Python 比较陌生,但是在阅读了很多关于使用 readline() 和 readlines() 的帖子之后,我似乎无法弄清楚这一点。

quotes = open("quotes.txt", "r")
#Opens the quotes file
quote = quotes.readlines()
#Uses the readlines() method to read each line of text file
lineCount = 0

for line in quote:
    lineCount += 1
    print("{}".format(line.strip()))

所以,我在这里使用 readlines() 方法,但问题是,这段代码一次打印每一行。

所以我在代码中尝试了 readline() ,但是编码只打印了一行,我不会显示这个代码,因为我没有运气弄清楚它。

我正在寻找打印一行,增加一个计数器并中断。

然后在下一次代码运行时,它会打印下一行并中断。

所以,本质上:

当我第一次运行我的程序时,它会打印:

"Quote 1" - Author

然后,在下一次运行中,它将是:

"Quote 2" - Author

任何可以帮助我解决这个问题的人,将不胜感激。

谢谢!

附加信息:

我已经从一个旧的播客中编译了一个引用列表,该列表在quotes.txt 文件中逐行写入,这是针对我目前正在使用 Tweepy 模块开发的 Twitter 机器人。 目前,我已经收集了大量的报价,所以我目前并不担心程序会循环回来并重新开始,直到我接近那个时间。

谢谢大家的帮助。

为了知道在下一个脚本执行时读取哪一行,我们需要永久保存这些信息。 为此,您可以将行计数器写入文本文件并在启动时读取其内容。 但是,在第一次执行脚本时可能会出现问题:如果之前从未运行过该脚本,则没有保存文件。 从不存在的文件中读取会引发错误。 因此我们trySAVE_FILE中读取。 如果文件可用,我们使用保存的号码。 如果它不可用,我们通过定义line_number_to_show = 0来初始化行号。 然后我们打开包含引号的文件,遍历行号并查找我们感兴趣的行号。如果找到指定的行,我们打印它。 下一步是保存下一个程序执行的行号。

一个非常基本的方法如下所示:

SAVE_FILE = 'line_number.txt'

try:
    with open(SAVE_FILE) as save_file:
        line_number_to_show = save_file.read().strip()
    line_number_to_show = int(line_number_to_show)
except (FileNotFoundError, ValueError) as _:
    line_number_to_show = 0

with open("quotes.txt") as quotes_file:
    for line_number, line in enumerate(quotes_file):
        if line_number == line_number_to_show:
            print(line)

with open(SAVE_FILE, 'w') as save_file:
    line_number_to_show = line_number_to_show + 1
    save_file.write(f'{line_number_to_show}')

重要笔记:

  • 以我的方式从SAVE_FILE读取行号很容易出错,因为我们不执行任何健全性检查或捕获 try/except 块中可能出现的错误。 生产代码需要进一步的对策来处理这些问题。
  • 您可以使用.readlines()将完整的文件内容读入列表,而不是像我那样读取文件。 由于列表存储在 memory 并读取完整文件,这可能会导致处理大文件时的 memory 消耗高。 通过enumerate()执行它会逐块读取文件,并且被认为是更高效的 memory
  • 对于扩展应用程序并取决于您的基础架构/架构(正如您在其中一个评论中所说的有关 Bot 的内容),您可能会考虑使用数据库来存储和读取引用。 如果这样做,您还将存储有关在下一次请求时提供哪个报价的所需信息。 然而,解决这个问题将是其他几个设计决策和(SO)问题的一部分。

只需使用:

f = open("quotes.txt","r")
lineCount = 0
for i in range(4):
    lineCount+=1
    print(f.readline())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM