2017-05-29 44 views
0

我有一個CSV文件(ZN_15M),我試圖每小時使用readcsv函數。所以,我有安裝apscheduler,我試圖用它來讀取每個小時csv文件(和一些其他的東西沒有顯示,但如果我能得到的readcsv東西去其他的東西也可以工作):Python Pandas - apscheduler -

import sys 
from time import sleep 
from apscheduler.schedulers.background import BackgroundScheduler 


scheduler = BackgroundScheduler() 
scheduler.start() 

def Run(): 
    f2 = open('C:\Users\cost9\OneDrive\Documents\PYTHON\Exported_Data\ZN_ES\ZN_15M.csv') 
    ZN = pd.read_csv(f2) 
    #Do stuff to the CSV File/DataFrame 
    ZN.tocsv(path_or_buf = 'path') 

def main(): 
    job = scheduler.add_interval_job(Run, minutes=60, args=()) 
    while True: 
     sleep(60) 
     sys.stdout.write('.'); sys.stdout.flush() 

我當我手動運行腳本時,不會出現任何錯誤,但沒有任何內容像我希望的那樣每小時運行一次。不知道我在做什麼錯在這裏...

更新:我收到以下錯誤:

def process_csv(path_to_csv): 
    ZN_ES_comb = pd.read_csv(path_to_csv) 
    # Insert your CSV processing here 
    ZN_ES_comb = pd.DataFrame(ZN_ES_comb) 
    ZN_ES_comb.to_csv(path_to_csv.replace('.csv', '_modified_{timestamp}.csv').format(
     timestamp=time.strftime("%Y%m%d-%H%M%S")), index=False) 

if __name__ == '__main__': 
    # Create CSV for demonstrating purposes 
    path_to_csv = 'C:\Users\cost9\OneDrive\Documents\PYTHON\Daily Tasks\ZN_ES\ZN_ES_15M\CSV\ZN_ES_comb.csv' 
    pd.DataFrame(ZN_ES_comb).to_csv(path_to_csv, index=False) 
    # Start scheduler 
    scheduler = BackgroundScheduler() 
    scheduler.start() 
    scheduler.add_job(func=process_csv, 
         args=[path_to_csv], 
         trigger=IntervalTrigger(seconds=2)) 
    # Wait for 7 seconds so that scheduler can call process_csv 3 times 
    time.sleep(7) 

錯誤是行「pd.DataFrame(ZN_ES_comb).to_csv(path_to_csv ,指數= FALSE)」 - 它說:

NameError: name 'ZN_ES_comb' is not defined 

回答

1

有在你的代碼的兩個問題:

  1. 應該ZN.to_csv()而不是ZN.tocsv()def Run()
  2. 參數值time.sleep()以秒爲單位,而不是像您明顯想到的那樣以分鐘爲單位。因此,在睡眠期間Run()根本沒有運行。

下面是一個可用於Python 3.5和APScheduler 3.3.1的工作解決方案。 IntervalTrigger()也有hours參數,您可能想使用而不是seconds

import time 

import pandas as pd 
from apscheduler.schedulers.background import BackgroundScheduler 
from apscheduler.triggers.interval import IntervalTrigger 


def process_csv(path_to_csv): 
    df = pd.read_csv(path_to_csv) 
    # Insert your CSV processing here 
    df.to_csv(path_to_csv.replace('.csv', '_modified_{timestamp}.csv').format(
     timestamp=time.strftime("%Y%m%d-%H%M%S")), index=False) 

if __name__ == '__main__': 
    # Create CSV for demonstrating purposes 
    path_to_csv = 'made_up.csv' 
    pd.DataFrame({'fruit': ['apple', 'banana'], 
        'number': [1, 2]}).to_csv(path_to_csv, index=False) 
    # Start scheduler 
    scheduler = BackgroundScheduler() 
    scheduler.start() 
    scheduler.add_job(func=process_csv, 
         args=[path_to_csv], 
         trigger=IntervalTrigger(seconds=2)) 
    # Wait for 7 seconds so that scheduler can call process_csv 3 times 
    time.sleep(7) 
+0

您好Tuomastik,謝謝,我仍然收到一個錯誤(顯示在上面原始發佈的編輯),我不知道爲什麼。我認爲我已經定義了ZN_ES_comb,但它並沒有認出它...... –

+0

在我的示例中,我創建了CSV,僅用於演示目的,因爲代碼中的註釋說明如下。您已擁有自己的CSV,因此您可以跳過該部分。另外,在'process_csv()'函數中,'pd.read_csv()'返回'DataFrame',所以不需要這行'ZN_ES_comb = pd.DataFrame(ZN_ES_comb)'。我在下面的代碼片段中調整了我的代碼以適合您的具體情況:https://pastebin.com/rFiaYnD1 – tuomastik

+1

謝謝!非常感激 –