假设我的文本文件是这样的:
确定/信息 - 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'
但除了存在所需字符串的行之外,几乎所有行都不存在。
有什么方法可以检查是否存在并且只打印一次?
答案 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