2017-01-18 13 views
0

从1971年至1970年,我有约30,000个日常温度栅格(.asc),需要重新命名。他们目前命名如下:tasmax_0.asc,tasmax_1.asc,....,tasmax_32767.asc。Python:使用朱利安日期对文件进行重命名的嵌套循环

我需要用朱利安日期和年份(即,tasmax_1_1971.asc,tasmax_2_1971.asc,...,tasmax_365_2070.asc)重命名它们。

我知道我需要使用不同计数器的嵌套循环:朱利安日计数器(需要在每年开始时重置)和一年计数器。我很容易与嵌套循环混淆,特别是在闰年有366天而不是365天的情况下,我必须每年重置茱莉安日计数器。

我使用Python 2.7

周围环绕我的头写这个剧本的任何帮助,将不胜感激!

在此先感谢!

+0

看看[这一个](http://stackoverflow.com/questions/3240458/how-to-increment-the-day-in-datetime-python)。你可以解决你的问题,没有任何嵌套循环。 – xzoert

回答

0

也许这样的事情是你在找什么:

import os 
filex = 0 
year = 1971 
while filex < 32768: 
    if ((year%400 == 0)or ((year%4 == 0) and (year%100 != 0))): 
     days = 366 
    else: 
     days = 365 
    current_day = 1 
    while current_day <= days: 
     os.rename(("tasmax_" + str(filex) + ".asc"),(("tasmax_" + str(current_day) + str(year) + ".asc"))) 
     current_day = current_day + 1 
     filex = filex + 1 
    year = year + 1 

的文件编号,在一年的日子,当天,和当年的计数器。

重命名使用

os.rename(oldfilename, newfilename) 

,但使用任何你希望的文件IM。

0

这个例子只是打印出1_19712_1971

from datetime import date, timedelta 

day = date(1971, 1, 1) #1 Jan 1971 
step = timedelta(1) #1 day 
curr_year = day.year 
count = 1 

while day.year <= 2070: 
    print("{}_{}".format(count, curr_year)) 
    day += step 
    count += 1 
    if day.year != curr_year: 
     count = 1 
     curr_year = day.year 
0

您可以使用Python​​模块。

import os 
import datetime 

start_date = datetime.datetime(1971, 1, 1) # January 1, 1971 

for fname in os.listdir("date_folder"): # Iterate through filenames 
    num_days = fname.split("_")[1] # Check number of days from start 
    cur_date = start_date + datetime.timedelta(days=num_days) # Add number of days to start 
    os.rename(fname, "tasmax_{0}_{1}".format(cur_date.day, cur_date.year)) # Reformat filename 

这假定所有的文件都在一个目录中。