2013-06-20 80 views
2

我有幾年的文件名爲day00000.nc,day00001.nc,day00002.nc,... day00364.nc。 他們代表365或366天。 我想重命名我的文件,像這樣day20070101.nc,day20070102.nc,... day20071231.nc 我該怎麼做? 謝謝將朱利安日轉換爲日期

+1

你試過了什麼? – Dhara

+1

您的年份代表哪裏? – Ander2

+0

他們都在同一年嗎?什麼是開始日期點? – Franko

回答

2

datetime在朱利安轉換器構建在它的使用%j格式說明strptime功能。假設你的文件'day'兩位數年份+朱利安+ extention(如果沒有,只是添加任何一年抵消你真的有)

file_date = filename[3:-3] 
file_date = datetime.datetime.strptime(file_date, '%y%j').strftime('%Y%m%d') 
new_filename = file_date.strftime('day%Y%m%d.nc') 

瞭解如何拿到年終

year = datetime.datetime.fromtimestamp(os.path.getctime(filename)).year 
file_date = datetime.datetime.strptime(filename[5:-3], '%j').replace(year=year) 
new_filename = file_date.strftime('day%Y%m%d.nc') 
14

使用後評論​​模塊從一年中的某天獲取日期。由於您的文件名似乎沒有年份值,因此我假設2007年的年份爲您的示例。如有需要,請隨意將代碼中的硬編碼2007替換爲變量。

import datetime 
oldFilename = 'day00364.nc' 
day = int(oldFilename[3:-3]) 
date = datetime.datetime(2007, 1, 1) + datetime.timedelta(day) #This assumes that the year is 2007 
newFilename = 'day%s.nc'%date.strftime('%Y%m%d') 
print newFilename # prints day20071231.nc 

對於那些因爲「該解決方案增加了一天」

的OP的文件編號爲0至364誰是downvoting這個答案,而不是1到365這個解決方案適用於在OP。如果您的日期從1到365,並且對您而言並不明顯,請在將日期轉換爲timedelta值之前自由減去「1」。

+0

我想你需要在最後一行更改'strptime'到'strftime'。 – Aya

+0

@Aya感謝您的支持! – Dhara

+1

我認爲這增加了一天。 – seaotternerd

1

隨着GNU AWK和任何類似Bourne殼

for old in * 
do 
    new=$(gawk -v old="$old" 'BEGIN{ 
      secs = (gensub(/[^[:digit:]]/,"","g",old) + 1) * 24 * 60 * 60 
      print gensub(/[[:digit:]]+/,strftime("%Y%m%d",secs),"",old) 
     }') 
    echo mv "$old" "$new" 
done 

測試之後刪除 「回聲」。