Skip to main content
 首页 » 编程设计

基于文本文件字符串的Python条件语句

2025年05月04日76zhwl

菜鸟问题在这里。我每 2 小时为 Python 脚本安排一次 cron 作业,但我希望脚本在 48 小时后停止运行,这不是 cron 的功能。为了解决这个问题,我使用计数标记 x 在文本文件中记录脚本末尾的执行次数,并在脚本开头打开文本文件,以便仅在以下情况下运行计数小于 n

但是,无论条件如何,我的脚本似乎总是运行。这是我尝试过的示例:

with open("curl-output.txt", "a+") as myfile: 
    data = myfile.read() 
 
    finalrun = "xxxxx" 
 
    if data != finalrun: 
        [CURL CODE] 
 
        with open("curl-output.txt", "a") as text_file: 
            text_file.write("x") 
            text_file.close() 

我想我在这里遗漏了一些简单的东西。请告知是否有更好的方法来实现这一目标。提前致谢。

请您参考如下方法:

您的原始代码的问题是您在 a+ 中打开文件模式,它似乎将搜索位置设置为文件末尾(在读取文件后立即尝试 print(data))。如果你使用 r相反,它有效。 (我不确定它应该是这样的。This answer 声明它应该写在最后,但从头开始阅读。documentation 不是很清楚)。

一些建议:而不是与 "xxxxx" 进行比较字符串,你可以只检查数据的长度(if len(data) < 5)。或者,按照建议,使用 pickle 存储一个数字,它可能如下所示:

import pickle 
try: 
    with open("curl-output.txt", "rb") as myfile: 
        num = pickle.load(myfile) 
except FileNotFoundError: 
    num = 0 
 
if num < 5: 
    do_curl_stuff() 
    num += 1 
    with open("curl-output.txt", "wb") as myfile: 
        pickle.dump(num, myfile) 

关于您的原始代码的另外两件事:您正在制作第一个 with阻止比它需要的更大。将字符串读入 data 后,您不再需要文件对象,因此您可以从除 data = myfile.read() 之外的所有内容中删除一级缩进。 .

此外,您不需要关闭 text_file手动。 with将为您完成(这就是重点)。