Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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_Time_Generator - Fatal编程技术网

Python 使用生成器以时间优先级读取两个文件

Python 使用生成器以时间优先级读取两个文件,python,time,generator,Python,Time,Generator,我刚刚读了一些关于发电机的书,想知道您将如何使用发电机: 假设有两个文件,每个文件都有一个时间列。每个文件都按升序时间排序,我希望使用时间优先级获取这些文件中的行。与编写简单的表达式(见下文)不同,我想知道创建generator next()是否是以时间优先级读取这两个文件的更好/合适的方法 for line1 in file1: do_something try: if time1<time2: do_something

我刚刚读了一些关于发电机的书,想知道您将如何使用发电机:
假设有两个文件,每个文件都有一个时间列。每个文件都按升序时间排序,我希望使用时间优先级获取这些文件中的行。与编写简单的表达式(见下文)不同,我想知道创建generator next()是否是以时间优先级读取这两个文件的更好/合适的方法

for line1 in file1:    
    do_something
    try:
        if time1<time2:
            do_something    
            continue
        else:
            do_something  
    except:
        pass  
    for line2 in file2:
        do_something  
        if time2>time1:
            break  
对于文件1中的第1行:
做点什么
尝试:
如果时间1时间1:
打破
使用


谢谢,这非常有帮助,而且速度更快!我有一个快速跟进:比如在for循环之前,我有一个while循环,即:while time>time1。如果两个文件都在满足此条件之前结束,我希望它退出循环。我怎样才能让发电机做到这一点呢。它似乎不像在生成器中放入yield None那样简单。@FancyDolphin,
在generator@FancyDolphin,我可能有点简明扼要。我的意思是,调用
raisegeneratorexit
,您需要根据某些特定条件退出生成器。我不确定我是否理解您的意思。在调用生成器之前,我需要打开while循环上的出口。这将需要标记file1和file2的文件结尾,我不知道如何做。
def generate_timeline(file):
    for line in file:
         time1 = extract_time_from_line(line)
         yield time1, line


for (time1, line) in heapq.merge(generate_timeline(file1), generate_timeline(file2)):
    process(line)