如果Python中的文本文件中不存在特定字符串,如何打印?

时间:2017-05-24 12:57:33

标签: python

假设我的文本文件是这样的:     

确定/信息 - 1070083 - 使用等待的I / O作为索引和数据文件..

    

确定/信息 - 1006069 - 数据缓存大小==> [100000] Kbytes,[2380]数据页。

    

确定/信息 - 1006070 - 数据文件缓存大小==> [0] Kbytes,[0]数据文件     页。

    

确定/信息 - 1200551 - 分配的TRIGMAXMEMSIZE:[4096]字节。

    

确定/信息 - 1007046 - 重组数据库[Finstmt]成功。

    

确定/信息 - 1007067 - 总重组经过时间:[8.36]秒。

    

确定/信息 - 1013273 - 数据库NA_PLN.Finstmt已更改。

现在我必须从这个文本文件中搜索Elapsed。如果存在Elapsed打印某些内容,如果不存在则打印其他引用。 我试过的是:

for line in inputFile:
    if 'Elapsed' in line:
        print 'Present'
    if 'Elapsed' not in line:
        print 'Not present'

但除了存在所需字符串的行之外,几乎所有行都不存在。

有什么方法可以检查是否存在并且只打印一次?

5 个答案:

答案 0 :(得分:1)

如果您希望对整个文件执行检查而不是逐行执行检查,则可以这样执行:

lines_in_file = open(inputFile).readlines()
test = 'Present' if any('Elapsed' in line for line in lines_in_file) else 'Not present'
print(test)

您可以阅读有关any here的更多信息。另请注意,any lazy 意味着它不必遍历整个lines_in_file容器。一旦其谓词(在这种情况下为'Elapsed' in line)评估为True,它就会退出。

答案 1 :(得分:1)

当您逐行循环遍历文件时,将对每一行执行以下语句。你想要的是一些基本上可以说

的代码
if "Elapsed" in file: 
    print("Present") 
else:
    print("Not present")

因为在python中read()函数将文件作为文字字符串,新行字符和所有字符读入,所以您可以按以下方式实现此代码:

file = open("filepath.txt") #this is your file's path
text = file.read()
if "Elapsed" in text: 
    print("Present") 
else:
    print("Not present")

这样可以省去循环文件的麻烦。

答案 2 :(得分:0)

您知道循环可以有else子句吗?

for line in inputFile:
    if 'Elapsed' in line:
        print 'Present'
        break
else:
    print 'Not present'  

这会让你知道Elapsed是否至少出现在你的文件中一次,这是我理解你想要达到的目标 只有在允许循环完成时才会调用else子句,即如果" Elapsed"不在您的档案中

答案 3 :(得分:0)

这应该有效:

present = False
    for line in inputFile:
        if 'Elapsed' in line:
            present = True 
            break
if present:
    print 'Present'
else:
    print 'Not present'

答案 4 :(得分:0)

除非文件很长,否则您只需将整个文件内容读入字符串并进行测试即可。

>>> from pathlib import Path
>>> 'Elapsed' in Path('filename.txt').read_text()
True