簡體   English   中英

python seek函數在動態更新的數據上返回空字符串

[英]python seek function return empty string on dynamic updated data

我正在使用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不返回任何內容。 它可以是不同的循環號。 當我檢查myfile時,它仍在更新.....那么我的代碼有任何問題嗎? 還是有其他方法可以做到這一點?

任何幫助表示贊賞!

您有兩個程序訪問磁盤上的相同文件? 如果真是這樣,則資源可能正在鎖定。 我設置了一個示例腳本,該腳本可以寫入文件,而另一個文件可以根據您提供的代碼讀取更改。

因此,在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)

在這種情況下,資源的更新速度慢於其讀取速度,因此底部編排打印的更改將為空白。 但是,如果我加快每秒的更改速度,那么我仍然會看到它們。 但是在某些情況下,並非所有更新都可以看到。

您可能想使用異步文件讀取來捕獲所有更改。 Python 3 asyncio庫不支持異步文件讀/寫,但是curio支持

另請參閱此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM