-2

たとえば、28個のファイルがあります:-

ファイル ->day01.ncファイル内:-

| lat | lon | date      |
| --- | --- | --------  |
| 7   | 68  | 2021-02-01|
| 7   | 69  | 2021-02-01|

ファイル ->day02.ncファイル内:-

| lat | lon | date      |
| --- | --- | --------  |
| 7   | 68  | 2021-02-02|
| 7   | 69  | 2021-02-02|

ファイル ->day28.ncファイル内:-

| lat | lon | date      |
| --- | --- | --------  |
| 7   | 68  | 2021-02-28|
| 7   | 69  | 2021-02-28|

Pythonスクリプトを使用して、、、...などtemp_ind20210201.ncの日付形式に従って名前を変換したい。temp_ind20210202.nctemp_ind20210328.nc

注:-そのday01.ncファイル内の日付形式は次のよう2021-02-01になります。やってみた :-

DATA_DIR = 'data'
today = datetime.datetime.now()
offset_1day = datetime.timedelta(days=1)
re_number = re.compile('day(\d{,2})\.nc')

for fname in glob.glob(DATA_DIR + "/*.nc"):
      number_string = re_number.search(fname)
if not number_string:
      continue
   number_of_days = int(number_string.group(1))
   str_timestamp = (today + (number_of_days - 1) * offset_1day).strftime("%Y%m%d")
   new_fname = f"{DATA_DIR}/temp_ind{_str_timestamp}.nc"
   print(f'{fname} -> {new_fname}')
   os.rename(fname, new_fname)
4

2 に答える 2

0

おそらく、bash のコマンド ラインからのループでこれを行うでしょう。CDO から awk に出力をパイプします。ファイルに複数の日付がある場合、これにより、ファイルの名前がファイルの最初の日付に変更されます。

for file in day*.nc ; do 
   mv $file temp_ind`cdo -s showdate $file | awk '{print $1}'`.nc
done 

CDO はハイフン yyyy-mm-dd を含む日付を出力するため、ハイフンが含まれるファイル名が得られることに注意してください。それが気に入らない場合は、 sedへの 2 番目のパイプを使用してそれらを削除できます。

于 2021-03-02T10:34:02.973 に答える