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_Parsing_Eof - Fatal编程技术网

Python 如何使文件处理程序闲置,直到新数据到达文件中

Python 如何使文件处理程序闲置,直到新数据到达文件中,python,parsing,eof,Python,Parsing,Eof,我有一个文本文件,每10秒由另一个程序编写一次。 我的代码遍历这个文件并解析我想要的数据。但在某个时刻,for循环到达文件的末尾,程序关闭 目标:我希望程序在for循环中等待更多的数据,以便它也解析新数据 我试着使用while,但由于某些原因,程序在退出while循环后会停止一点。如果我添加25行,它会处理其中的9行,然后程序退出for循环,程序完成(而不是崩溃) 问题:是否有更好的方法使程序闲置,直到新数据到达?这个代码有什么问题 k=-1 打开('epideiksh.txt')作为天气_文件

我有一个文本文件,每10秒由另一个程序编写一次。 我的代码遍历这个文件并解析我想要的数据。但在某个时刻,for循环到达文件的末尾,程序关闭

目标:我希望程序在for循环中等待更多的数据,以便它也解析新数据

我试着使用while,但由于某些原因,程序在退出while循环后会停止一点。如果我添加25行,它会处理其中的9行,然后程序退出for循环,程序完成(而不是崩溃)

问题:是否有更好的方法使程序闲置,直到新数据到达?这个代码有什么问题

k=-1
打开('epideiksh.txt')作为天气_文件:
对于weather_文件中的行:
k=k+1
lines_left=计数('epideiksh.txt')-k的行数

而(左行模拟
tail
的最简单但容易出错的方法是:

with open("filename") as input:
  while True:
    for line in input:
      if interesting(line):
        do_something_with(line)
    sleep a_little
    input.seek(0, io.SEEK_CUR)
在我非常有限的测试中,这在没有seek的情况下似乎是可行的。但它不应该这样做,因为通常你必须这样做才能清除eof标志。需要记住的一点是,tell()不能在(文本)文件上使用,而从seek_CUR进行搜索会调用tell()。因此,在上面的代码段中,您不能
for
循环中分离出来,并落入
输入.seek()
调用中

上面的问题是,
readline
(迭代器中隐含的)可能只读取当前正在写入的行的一部分。因此,您需要准备放弃并重新读取部分行:

with open("filename") as input:
  # where is the end of the last complete line read
  where = input.tell()
  # use readline explicitly because next() and tell() are incompatible
  while True:
    line = input.readline()
    if not line or line[-1] != '\n':
      time.sleep(a_little)
      input.seek(where)
    else: 
      where = input.tell()
      if interesting(line):
        do_something_with(line)

count\u lines\u of
是如何工作的?还有10行,为什么还要睡觉?是不是早期版本的延迟,还是什么?当你说“退出while循环后停止一点”,你指的是哪个while循环?如果它是外部的,为什么它不应该停止?指针是错误地留下的。它是我忘记重命名的左行。它是左行=计数行('epideiksh.txt')-k。只有一个while循环。外部的out是for循环。计数行是我编写的一个计算文件总行数的函数。10是任意的。我只是在文件末尾附近选取了一个小数字,所以每次读一行时,你都在读整个文件(可能更频繁)。这似乎有点低效:)我不知道你的代码为什么会表现出这种行为;我怀疑这是因为文件迭代器缓冲了输入,所以在for循环中遇到了EOF,尽管您还没有到达那个点。但这只是一个猜测。我提供了一个关于如何跟踪的答案。