【问题标题】:python seek function return empty string on dynamic updated datapython seek函数在动态更新数据上返回空字符串
【发布时间】:2018-01-26 01:40:09
【问题描述】:

我正在使用 seek 函数在更新的文件中提取新行。我的代码如下所示:

read_data=open('path-to-myfile','r')
read_data.seek(0,2)
while True:
     time.sleep(sometime)
     new_data=read_data.readlines()
     do something with new_data

myfile 是一个 csv 文件,会不断更新

问题是,通常在 while 内循环几次之后,new_data 什么都没有返回。它可以是不同的循环数。虽然我检查了我的文件,但它仍在更新......所以我的代码有什么问题吗?或者有没有其他方法可以做到这一点?

任何帮助表示赞赏!

【问题讨论】:

    标签: python python-3.x io


    【解决方案1】:

    您有两个程序访问磁盘上的同一个文件?如果是这种情况,则资源可能被锁定。我设置了一个写入文件的示例脚本,以及根据您提供的代码读取更改的另一个文件。

    所以在 python 的一个实例中:

    import time
    while True:
        time.sleep(2)
        with open('test.txt','a') as read_data:
            read_data.seek(0,2)
            read_data.write("bibbity boopity\n")
    

    在另一个python实例中

    import time
    read_data=open('test.txt','r')
    read_data.seek(0,2)
    while True:
         time.sleep(1)
         new_data=read_data.readlines()
         print(new_data)
    

    在这种情况下,资源的更新速度比读取速度慢,因此底部 prog 打印的更改将为空白。但是如果我加快每秒的变化,我仍然可以看到它们。但在某些情况下,并非所有更新都可以看到。

    您可能希望使用异步文件读取来捕获所有更改。 Python 3 asyncio 库不支持异步文件读/写,但 curio 支持。

    另请参阅question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-07
      • 2018-12-02
      • 2017-05-05
      • 2020-09-23
      • 2018-02-07
      • 2016-07-13
      • 1970-01-01
      • 2015-09-14
      相关资源
      最近更新 更多