day00000.nc、day00001.nc、day00002.nc、...day00364.nc という名前のファイルが数年間あります。それらは 365 日または 366 日を表します。ファイルの名前を次のように変更したい day20070101.nc, day20070102.nc , ...day20071231.nc どうすればいいですか? ありがとうございました
質問する
19767 次
3 に答える
15
datetimeモジュールを使用して、年間通算日から日付を取得します。ファイル名に年の値がないように見えるため、例のように年が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
「このソリューションは1日を追加する」という理由でこの回答に反対票を投じている人のために
OP のファイルには、1 から 365 ではなく、0 から 364 の番号が付けられています。この解決策は、OP で機能します。日付が 1 から 365 であり、それがまったく明らかでない場合は、timedelta 値に変換する前に、day 変数から自由に「1」を差し引いてください。
于 2013-06-20T14:39:11.503 に答える
3
datetime
フォーマット指定子strptime
を使用して、その機能にジュリアンコンバーターが組み込まれています。%j
ファイルが 2 桁の年 + ユリウス + 拡張子であると仮定します'day'
(そうでない場合は、実際にある年のオフセットを追加してください)
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')
于 2013-06-20T14:37:45.650 に答える
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
テスト後に「エコー」を削除します。
于 2013-06-20T20:43:54.590 に答える