Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中查找运行是否正确结束_Python - Fatal编程技术网

在python中查找运行是否正确结束

在python中查找运行是否正确结束,python,Python,我正在尝试在多个文件中运行python脚本,并读取其输出。 目前,它仅通过以下方式检查文件是否存在: if file == "output": 但此输出无法确认运行是否正确完成。正确完成运行后,文件的最后一行是: “此运行在完成” 如何读取最后一行文件? 根据我目前在python方面的知识(新手),我成功地做到了: #!/usr/bin/python3 import os input = "FeMnPSi_EOS_10." for subdirs, dirs, files in os.walk

我正在尝试在多个文件中运行python脚本,并读取其输出。 目前,它仅通过以下方式检查文件是否存在:

if file == "output":
但此输出无法确认运行是否正确完成。正确完成运行后,文件的最后一行是: “此运行在完成”

如何读取最后一行文件? 根据我目前在python方面的知识(新手),我成功地做到了:

#!/usr/bin/python3
import os
input = "FeMnPSi_EOS_10."
for subdirs, dirs, files in os.walk(input):
    for file in files:
        if file == "out-Dy-eos2":
            print("file found")
            ifile=input+"/"+file
            with open(ifile, "r") as if1:
                for line in if1:
                    if "This run finished at" in line:
                        print("Ends Properly")
此代码的问题是:

  • 它不知道“This run finished at”行是否为 文件的倒数第二行
  • 我不确定,但我猜,在这里 python必须按顺序读取文件…对于这10000多行 每个文件

因此,我可以更好地检查行是否存在,以及最后两行中是否存在行,而不读取整个文件吗?

缺少的位是
if1.readlines()
,它将整个文件作为字符串列表读取。然后可以使用切片表示法访问最后一个元素,但只有一个元素

with open(ifile, 'rb') as if1:
    if "This run finished at" in if1.readlines()[-2]
        print("Ends Properly")

给你。虽然10K+很小,因此您可以
if1.readlines()[-2:]
来获取最后两行。@J.F.Sebastian OP没有说他的行有多长,他正在寻求一种有效的方法。@simonzack:and?你注意到我之前评论中的链接了吗?@J.F.Sebastian我喜欢你链接的算法(比我链接的答案要好),但我觉得你的
阅读行
的回答不是很相关。@simonzack:。除非OP已经测量并证明简单的解决方案太慢;你不应该尝试更复杂的解决方案。-1用于回答重复的问题。OP不是要求最后n行,只是倒数第二行。