2015-05-18 54 views
0

我想寫一個Python腳本的.ASC文件的文件夾轉換(365個文件每年都在逐年舉辦不同的文件夾)有年月日在其文件名有yearjuliandate代替而朱利安日期需要3位數字(即1 = 001)。 它們的格式是:ETos19810101.asc。 我希望它們如下:ETos1981001.asc轉換YYYYMMDD文件名YYYYJD

如何在Python中編寫此代碼,我可以遍歷每個文件並將其轉換爲正確的Julian日?

我正在嘗試編寫一個Python腳本來轉換.asc文件的文件夾(每年在按年組織的不同文件夾中的每年365個文件),它們的文件名中包含yearmonthdate,並且具有yearjuliandate而茱莉亞日期需要3位數字(即1 = 001)。

  • 格式它們是:ETos19810101.asc
  • 我希望他們能夠爲:ETos1981001.asc

我怎樣寫這在Python,我可以遍歷每個文件,並將其轉換爲正確的朱連天?

我有這個至今:

import os.path, os, glob 

for filename in glob.glob(filepath + "/*.asc"): 
    jdate = '%03d' %doy #creates 3 digit julian date 
    doy = doy + 1 
    filename.replace(int[-8:-4], jdate + 1) 
+0

請使用編輯鏈接添加任何相關代碼或錯誤信息給你的問題。 – IanAuld

+0

我添加了我到目前爲止對我的文章的代碼。有什麼建議麼? – MattS

回答

0

使用'%j specifier隨着datetime.strptimeos.rename和各種os.path命令:

from datetime import datetime 
from glob import glob 
import os 

for filename in glob(os.path.join(filepath, 'ETos*.asc')): 
    try: 
     dt = datetime.strptime(os.path.basename(filename), 'ETos%Y%m%d.asc') 
    except ValueError as e: 
     continue # rest of file name didn't have valid date - do the needful 
    os.rename(filename, os.path.join(filepath, format(dt, 'ETos%Y%j.asc'))) 

你可能會想有點處理,並考慮到你的路徑進行調整,但這是一般原則。

+0

不錯!謝謝,這工作!不完全理解它是如何工作的(我是一個Python新手),但它的工作! – MattS

+0

@MattS不用擔心通過「os.path.basename」和「datetime.strptime」和「os.path.join」的文檔閱讀 - 如果不將文檔複製粘貼到文檔中,所有內容都應該更清晰: ) –

0

對於約會,你應該使用datetime module工作。用strptime解析日期字符串。有沒有函數返回一個Julian日期,但它很容易地創建一個:

def julian_day(dt): 
    jan1 = dt.replace(month=1, day=1) 
    return 1 + (dt - jan1).days 
+0

*沒有函數返回Julian日期* - 呃...有'%Y%j'的'strftime'格式很好的工作 –

+0

@JonClements是的,我忘了那個。儘管如此,仍然可能有價值。 –

+0

'int(format(dt,'%j'))'那麼也許? –

1

給定一個文件名如下(可以重複使用os.walk您的文件系統)

filename = 'ETos19810101.asc' 

所有你必須拆分文件名讓每一個顯著部分首先:

import os 
name, ext = os.path.splitext(filename) 
prefix = name[0:-6] # negative prefix => string end as reference 
strdate = name[-6:] 

然後你可以解析日期:

from datetime import datetime 
date = datetime.strptime(strdate, '%Y%m%d') 

現在你可以加入everyt興合(%Y%j的日期格式,你所希望的方式):

newfilename = '{prefix}{date:%Y%j}{ext}'.format(prefix=prefix, date=date, ext=ext) 

最後文件重命名爲:

os.rename(filename, newfilename) 

注意,如果newfilename已經存在的最後一個指令將失敗。 要解決這個問題,你必須刪除該文件,如果存在的話:

if os.path.exists(newfilename): 
    os.remove(newfilename) 
os.rename(filename, newfilename)