有人可以帮我确定我在下面做错了什么吗
def SeeIfExactRangeIsFound():
with open(logfile) as input_data:
mylist = []
for line in input_data:
if BeginSearchDVar in line: # Or whatever test is needed
print line.strip()
#mylist.append((line.strip()))
#return mylist
break
for line in input_data: # This keeps reading the file
if line.strip() == EndinSearchD:
break
print line
#mylist.append((line))
#return mylist
#SeeIfExactRangeIsFound()
LRange = SeeIfExactRangeIsFound()
print LRange
我正在遍历文件,仅打印出该文件的部分。与之类似,当在读取的行中找到特定模式时,我便开始打印日志文件的内容。并继续打印第一行之后的所有行,直到找到包含EndingSearchD变量中找到的模式的行。
这适用于“打印”。但是如您所见,我想将SeeIfExactRangeIsFound函数的输出存储在一个变量中,并稍后使用该变量的内容。
我的问题是,尽管我尝试过尝试(以下面的方式注释)尝试不同的方法来实现我的目标,但似乎没有一个奏效。我觉得我已经很接近答案了,但是我花了2个小时才弄清楚这个问题。
有什么想法吗?
答案 0 :(得分:1)
符合您的描述而不是您的代码的版本
找到特定模式后,我开始打印日志文件的内容 在正在读取的行中。然后继续打印所有行 第一行,直到包含EndingSearchD中找到的模式的行 找到变量。
def SeeIfExactRangeIsFound():
with open(logfile) as input_file:
input_data = input_file.readlines()
mylist = []
allow_yielding = False
for line in input_data:
if BeginSearchDVar in line:
allow_yielding = True
if allow_yielding:
yield line
if line.strip() == EndinSearchD:
break
LRange = SeeIfExactRangeIsFound()
print LRange
答案 1 :(得分:0)
您几乎明白了,但是您的return语句不在适当的范围内:
def SeeIfExactRangeIsFound():
with open(logfile) as input_data:
mylist = []
for line in input_data:
if BeginSearchDVar in line: # Or whatever test is needed
print line.strip()
mylist.append((line.strip()))
break
for line in input_data: # This keeps reading the file
if line.strip() == EndinSearchD:
break
print line
mylist.append((line))
return mylist
作为奖励,您可以轻松地将其转换为生成器:
def SeeIfExactRangeIsFound():
with open(logfile) as input_data:
for line in input_data:
if BeginSearchDVar in line: # Or whatever test is needed
yield line.strip()
for line in input_data: # This keeps reading the file
if line.strip() == EndinSearchD:
break
yield line
并像这样消费它
results = [x for x in def SeeIfExactRangeIsFound()]