Python:嵌套循环,用于使用julian日期重命名文件

时间:2017-01-18 18:47:53

标签: python nested-loops julian-date

我从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

任何有关围绕编写此脚本的帮助都将非常感谢!

提前致谢!

3 个答案:

答案 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

文件编号的计数器,一年中的天数,当天和当前年份。

使用

重命名文件im
os.rename(oldfilename, newfilename)

但请使用您想要的任何内容。

答案 1 :(得分: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

答案 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

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