每天安排日常python功能并在excel中写入输出

时间:2017-03-10 21:27:57

标签: python

我是使用Python 3.6的新手,我有一个主要功能,我希望python每天运行,同时每次在不同的文件中写下给定的输出。 在这一刻,我的代码是:

 #This is the child function I created
from ObtainsDistancesfromGoogleforRange import obtaindistance

def main():

dir = os.path.dirname(os.path.realpath(__file__))

passwords=['a', 'b']
ranges=[(1,2),(2,3)]


# Creates separate text files by passing the range for each file to the function obtaindistance, and then executing all instances of the function in parallel
proc=[]
for rangeind in range(0,len(passwords)):    
    password=passwords[rangeind]
    rangestart=ranges[rangeind][0]
    rangeend=ranges[rangeind][1]
    p = Process(target=obtaindistance,args=(password,rangestart,rangeend))          
    proc.append(p)

print(proc)

# Runs all processes in parallel
for p in proc:
    p.start()
for p in proc:
    p.join()    

# Appends the text files
output_f=open(os.path.join(dir,'Distances.csv'),'w',newline='')
output_writer=csv.writer(output_f)
output_header=['Destination','Origin','Date-time of query','Distance (meters)','Duration (seconds)','Duration in Traffic (seconds)', 'Query status']
output_writer.writerow(output_header)
for rangeind in range(0,len(passwords)):
    rangestart=ranges[rangeind][0]
    rangeend=ranges[rangeind][1]
    dir = os.path.dirname(os.path.realpath(__file__))
    input_f=open(os.path.join(dir,'DistancestoMarkets_'+str(rangestart)+'_'+str(rangeend)+'.csv'))
    output_f.write(input_f.read())

#Close files
output_f.close()
input_f.close()

if __name__ == '__main__':
    main()

我想让我的脚本每天都在不同的时间运行。我试过APScheduler,但我还没能使它成功。有任何想法吗? 另外我认为可能存在问题,因为我告诉脚本每次以相同的名称运行时都会创建一个新的csv文件,所以我想我必须修改它以便在每次运行时保存它下载的信息。一份不同的文件。 谢谢!

3 个答案:

答案 0 :(得分:1)

要每天运行一个程序,最简单的方法是使用Windows的调度程序(任务调度程序),这样它就是运行脚本的操作系统。

为避免每天覆盖输出文件,您有两种方法:

  1. 使用output_f=open(os.path.join(dir,'Distances.csv'),'a',newline='')
  2. 以附加模式打开文件
  3. 在文件名后添加时间戳,因此每天您都会创建一个名称不同的文件(如果需要,您可以在某一天轻松地检索文件)。

答案 1 :(得分:0)

我建议您使用从系统时间派生的内容来扩充文件名。例如:

override func prepareForReuse() {
        super.prepareForReuse()

        for view in self.subviews{
            view.removeFromSuperview()
        }
    }

如果您希望文件名更加人性化,请改用datetime包。

对于您的初始问题,我同意其他问题:使用您的操作系统的日程安排,每天在所需的时间运行。

答案 2 :(得分:0)

谢谢,我使用任务调度程序和recomendations来运行来自此博客的python脚本:https://blogs.esri.com/esri/arcgis/2013/07/30/scheduling-a-scrip/

每次运行脚本时都会创建一个新的directoy。

    datetimeid= datetime.datetime.strftime(datetime.datetime.now(),'%Y%m%d-%H%M%S') #Define the datetime as a string in the format YearMonthDay - HourMinuteSecond
output_dir = os.path.join(dir,datetimeid) #Create a new folder with the date-time of execution
if not os.path.exists(output_dir):
    os.makedirs(output_dir)