2017-01-18 34 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 

這假定所有的文件都在一個目錄中。