簡體   English   中英

如何阻止我的腳本多次寫入 Panda 數據幀的最后一行?

[英]How do I stop my script from writing the last row of a Panda dataframe multiple times?

我的應用程序相對簡單,因為如果用戶空閑時間超過 0.5 秒,它會跟蹤用戶的空閑時間,將其打印到標准輸出(用於在 Pycharm 中進行調試),創建一個 Pandas 數據幀,然后一旦鼠標移動,它將上次空閑時間寫入 csv 文件。

關鍵是生成的 CSV 顯示了我確定為數據幀最后一行的重復項。 所以基本上,我確定的是,如果我繼續移動鼠標,它只會繼續寫最后一行。

我怎樣才能讓腳本只寫最后一行一次,一旦我從空閑狀態變為活動狀態,然后一旦我回到空閑狀態就恢復循環,然后重復該過程? 我試圖刪除最后一行df.head(-1)但這沒有做任何事情。 僅供參考,我是一個Python的n00b,所以任何幫助,將不勝感激,對我一個學習的機會。

class LASTINPUTINFO(Structure):
    _fields_ = [
        ('cbSize', c_uint),
        ('dwTime', c_uint),
    ]


def main():
    while True:
        time.sleep(1)
        if track_idle_time() >= .5:
            print(track_idle_time())
            df = pd.DataFrame({track_idle_time()})
            print(df.values)
        if track_idle_time() < .5:
            df.head(-1)
            df.to_csv(r'C:\users\bob\Desktop\activity.csv', mode='a', header=False, index=False)
        else:
            track_idle_time()

def track_idle_time():
    lastInputInfo = LASTINPUTINFO()
    lastInputInfo.cbSize = sizeof(lastInputInfo)
    windll.user32.GetLastInputInfo(byref(lastInputInfo))
    millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime
    return millis / 1000.0

因此,我注意到的一件事是您多次調用track_idle_time() - 如果上次輸入時間在這些調用之間沒有改變,則沒有必要,如果發生了變化,您將面臨不正確行為的風險。 這不是導致您出現問題的原因,但最好將其清理干凈。

真正導致您出現問題的原因是,只要空閑時間超過 >.5,就設置DF,但只要空閑時間 <.5,就將其寫入 只要空閑時間保持在 <.5 以下,您就會繼續寫入上次 >.5 的內容。 寫完后清除即可。

(順便說一句,我不確定您為什么在這里使用 DataFrame,盡管您似乎只是在寫一個數字,但我想您以后可能想添加更多列。)

df = None # initialize

while True:
    idle_time = track_idle_time()
    if idle_time >= .5:
        #print(idle_time)
        df = pd.DataFrame({idle_time})
        #print(df.values)
    elif df != None:
        df.to_csv(r'C:\users\bob\Desktop\activity.csv', mode='a', header=False, index=False)
        df = None # clear after writing
    time.sleep(1)

暫無
暫無

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

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