我从1971年到1970年每天需要重新命名约30,000个温度栅格(.asc)。它们目前的命名如下:tasmax_0.asc,tasmax_1.asc,....,tasmax_32767.asc。
我需要用julian日期和年份重命名它们(例如,tasmax_1_1971.asc,tasmax_2_1971.asc,....,tasmax_365_2070.asc)。
我知道我需要使用具有不同计数器的嵌套循环:julian day counter(需要在每年年初重置)和一年计数器。我很容易与嵌套循环混淆,特别是在闰年有366天而不是365天的情况下,我必须每年重置朱利安日计数器。
我正在使用python 2.7
任何有关围绕编写此脚本的帮助都将非常感谢!
提前致谢!
答案 0 :(得分: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
文件编号的计数器,一年中的天数,当天和当前年份。
使用
重命名文件imos.rename(oldfilename, newfilename)
但请使用您想要的任何内容。
答案 1 :(得分:0)
此示例只打印出1_1971
,2_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
答案 2 :(得分:0)
您可以使用Python的datetime
模块。
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
这假定所有文件都在目录中。