代码之家  ›  专栏  ›  技术社区  ›  Aqueous Carlos

如何使用列表(datetime.timedelta)中的循环特定日期并提取到不同的csv文件

  •  -1
  • Aqueous Carlos  · 技术社区  · 6 年前

    以下代码不正确,因为datetime.timedelta(day=)必须包含整数而不是字符串。

    从链接中获取引用 How to use for loop and add one day (timedelta) every time

    在这种情况下很难定义新的函数,有什么简单方便的方法可以解决吗?

    --已解决--通过添加:day=int(字符串格式的day)

    def get_data():
    
        # Every stock can loop on every periods
        stocks = ['A', 'B', 'C', 'D', 'E','F','G','H']
    
        # since the limitation of API data provider, ~180 days' data can be extracted per request 
        periods = ['0','178','356','534']
    
        for x in stocks:
    
            for _ in range(10):
                tws.reqHistoricalData(x)
    
                for n in periods:
    
                    data = pd.DataFrame(reqHistoricalData(datetime.datetime.today()- datetime.timedelta(days=n)).strftime("%Y%m%d %H:%M:%S %Z"))
    
                    # if there are any empty data, it can "smart" loop back and start from corresponding stock AND period without running again from the beginning
                    if not data.empty:
                        #1 st Edited
                        data.to_csv("filename"+x+"@"+n+".csv")
                        break
    
                    print("Data is empty")
    

    现有代码仅导出与FielNeMa@ 0、FielNeMeb @ 0、FieleCeC @ 0的CVS… 但是,它不能导出到不同的csv文件,如下所示

    data.to_csv("filename"+x+"@"+n+".csv")
    
    filenameA@0.csv
    filenameA@178.csv 
    filenameA@356.csv
    filenameA@534.csv
    filenameB@0.csv
    filenameB@178.csv
    filenameB@356.csv
    filenameB@534.csv
    filenameC@0.csv
    ..........
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Aqueous Carlos    6 年前

    感谢您提供furas的剩余部分,下面是解决方案

    def get_data():
    
        # Every stock can loop on every periods
        stocks = ['A', 'B', 'C', 'D', 'E','F','G','H']    
    
        periods = [0,178,356,534,712]
    
        for x in stocks:
    
            for n in periods:
                tws.reqHistoricalData(x)
    
                for _ in range(10): # repeat it only 10 times
                    today = datetime.datetime.today()
                    delta = datetime.timedelta(days=n)
                    data = pd.DataFrame(reqHistoricalData(today-delta).strftime("%Y%m%d %H:%M:%S %Z"))
    
                    if not data.empty:
                        data.to_csv("filename{}@{}.csv".format(x, n))
                        break # exit `for _` loop so it doesn't read again for the same period
    
                    print("empty data for", x, str(n), '... reading again')
                    tws.reqHistoricalData(x) # read again for the same period