在python函数中使用yield、print和return

2024-09-28 17:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我找出我做错了什么吗

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函数的输出存储在一个变量中,然后使用该变量的内容。你知道吗

我的问题是,尽管我尝试了不同的方法来实现我的目标,但似乎都不管用。我觉得我离答案太近了,但我花了两个小时在这个问题上却想不出来。你知道吗

有什么想法吗?你知道吗


Tags: 文件inforinputdatareturnifline
2条回答

你差不多拿到了,但是你的返回语句不在正确的范围内:

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()]

与您的描述(而不是代码)匹配的版本

I start printing content of logfile when a specific pattern is found in the line being read. and continue printing all lines after that first line until a line containing the pattern found in EndingSearchD variable is found.

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

相关问题 更多 >