使用 readline() 读取整行,然后移动到 .txt 文件中的下一行,每个后续 运行 使用 Python
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 机器人。目前,我已经收集了大量的报价,所以我目前并不担心程序会循环并重新开始,直到我接近那个时间。
谢谢大家的帮助。
只需使用:
f = open("quotes.txt","r")
lineCount = 0
for i in range(4):
lineCount+=1
print(f.readline())
为了知道在下一次脚本执行时读取哪一行,我们需要永久保存此信息。为此,您可以将行计数器写入文本文件并在启动时读取其内容。
但是,第一次执行脚本时可能会出现问题:如果脚本之前从未 运行,则不会保存任何文件。从不存在的文件中读取会引发错误。因此我们try
读自SAVE_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()
将完整的文件内容读入列表,而不是像我那样读取文件。由于列表存储在内存中并读取完整的文件,因此在处理大文件时可能会导致高内存消耗。通过 enumerate()
读取文件块是 considered to be more memory efficient.
- 为了扩展应用程序并根据您的 infrastructure/architecture(正如您在其中一条评论中所说的关于 Bot 的内容),您可能会考虑使用数据库来存储和读取引文。如果这样做,您还将存储有关在下一次请求时提供哪个报价的所需信息。但是,解决这个问题将成为其他几个设计决策和 (SO) 问题的一部分。
我对 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 机器人。目前,我已经收集了大量的报价,所以我目前并不担心程序会循环并重新开始,直到我接近那个时间。
谢谢大家的帮助。
只需使用:
f = open("quotes.txt","r")
lineCount = 0
for i in range(4):
lineCount+=1
print(f.readline())
为了知道在下一次脚本执行时读取哪一行,我们需要永久保存此信息。为此,您可以将行计数器写入文本文件并在启动时读取其内容。
但是,第一次执行脚本时可能会出现问题:如果脚本之前从未 运行,则不会保存任何文件。从不存在的文件中读取会引发错误。因此我们try
读自SAVE_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()
将完整的文件内容读入列表,而不是像我那样读取文件。由于列表存储在内存中并读取完整的文件,因此在处理大文件时可能会导致高内存消耗。通过enumerate()
读取文件块是 considered to be more memory efficient. - 为了扩展应用程序并根据您的 infrastructure/architecture(正如您在其中一条评论中所说的关于 Bot 的内容),您可能会考虑使用数据库来存储和读取引文。如果这样做,您还将存储有关在下一次请求时提供哪个报价的所需信息。但是,解决这个问题将成为其他几个设计决策和 (SO) 问题的一部分。