0

ファイル名に yearmonthdate が含まれる .asc ファイル (年ごとに編成されたさまざまなフォルダーにある毎年 365 ファイル) のフォルダーを変換して、代わりに yearjuliandate を持ち、ユリウス日を 3 にする必要がある python スクリプトを作成しようとしています。数字 (つまり、1 = 001)。フォーマットは ETos19810101.asc です。私はそれらを次のようにしたい:ETos1981001.asc

各ファイルを反復処理して正しいユリウス日に変換できる Python でこれを記述するにはどうすればよいですか?

ファイル名に yearmonthdate が含まれる .asc ファイル (年ごとに編成されたさまざまなフォルダーにある毎年 365 ファイル) のフォルダーを変換して、代わりに yearjuliandate を持ち、ユリウス日を 3 にする必要がある Python スクリプトを作成しようとしています。数字 (つまり、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)
4

3 に答える 3

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')

これで、すべてを結合できるようになりました (%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)
于 2015-05-18T15:59:28.303 に答える