-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.nc,...。temp_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

1

根据下面的问题和评论,您希望能够提取 NetCDF 文件中的第一个日期并使用它为该文件生成一个新文件名。以下应该可以工作,但可能需要调整,具体取决于时间的格式:

import xarray as xr
ds = xr.open_dataset("infile.nc")
"temp_ind" + ds.time[0].values.astype("str")[0:10].replace("-","") + ".nc"
于 2021-02-24T11:26:08.057 回答
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 。

于 2021-03-02T10:34:02.973 回答