等到动态更新 csv 有 X 行后再执行 (python 2.7)

wait until dynamically-updating csv has X number of rows before executing (python 2.7)

我想检查一个 csv 文件(连续地或每隔 x seconds/milliseconds),并在 csv 达到临界行数后执行一个函数。

我看过 apscheduler,但我认为有更简单的方法可以做到这一点。

非常感谢您的帮助!

Python 2.7,Unix

你可以使用asyncio模块来实现,使用Python 3.5,一个工作示例如下:

import asyncio

required_lines = 3
sleep_seconds = 2


async def count_lines(loop):
    num_lines = open('file_name.csv').read().count('\n')
    while num_lines != required_lines:
        await asyncio.sleep(sleep_seconds)
        num_lines = open('file_name.csv').read().count('\n')

loop = asyncio.get_event_loop()
loop.run_until_complete(count_lines(loop))
loop.close()

在 Python 3.4 中,使用下面的 count_lines 函数代替上面的函数:

@asyncio.coroutine
def count_lines(loop):
    num_lines = open('file_name.csv').read().count('\n')
    while num_lines != required_lines:
        yield from asyncio.sleep(sleep_seconds)
        num_lines = open('file_name.csv').read().count('\n')

编辑: for Python 2.7 您可以使用 trollius 库,如下所示(trollius 仍然有效,但不再维护!):

import trollius
from trollius import From


required_lines = 3
sleep_seconds = 2

@trollius.coroutine
def count_lines():
    num_lines = open('file_name.txt').read().count('\n')
    while num_lines != required_lines:
        yield From(trollius.sleep(sleep_seconds))
        num_lines = open('file_name.txt').read().count('\n')

loop = trollius.get_event_loop()
loop.run_until_complete(count_lines())