将YYYYMMDD文件名转换为yyyjd

2024-09-30 22:18:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个python脚本来转换一个.asc文件的文件夹(每年365个文件在不同的文件夹中按年份组织),文件名中的yearmonthdate改为yearjuliandate,而julian日期需要是3位数(即1=001)。 它们的格式是:ETos19810101.asc。 我希望它们是:ETos1981001.asc

如何用Python编写这个文件,在这里我可以迭代每个文件并将其转换为正确的儒略日?在

我正在尝试编写一个Python脚本来转换一个.asc文件的文件夹(每年365个文件在不同的文件夹中按年份组织),文件名中的yearmonthdate改为yearjuliandate,而julian日期需要是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)

Tags: 文件脚本文件夹文件名格式glob年份位数
3条回答

在处理日期时,应该使用^{} module。用strptime解析日期字符串。没有返回儒略日期的函数,但创建儒略日期很容易:

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

使用'%j specifier以及datetime.strptime和{}以及各种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')))

你可能需要一点处理,并根据你的路径进行调整,但这是一般原则。在

给定如下文件名(可以使用os.walk迭代文件系统)

filename = 'ETos19810101.asc'

首先,必须拆分文件名以获取每个重要部分:

^{pr2}$

然后可以解析日期:

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)

相关问题 更多 >