将 YYYYMMDD 文件名转换为 YYYYJD
Convert YYYYMMDD filename to YYYYJD
我正在尝试编写一个 python 脚本来将文件名中包含 yearmonthdate 的 .asc 文件文件夹(每年在按年份组织的不同文件夹中的 365 个文件)转换为 yearjuliandate相反,儒略日期需要是 3 位数字(即 1 = 001)。
它们的格式是:ETos19810101.asc。
我希望它们是:ETos1981001.asc
如何在 Python 中编写此代码,以便遍历每个文件并将其转换为正确的儒略日?
我正在尝试编写一个 Python 脚本来将文件名中包含 yearmonthdate 的 .asc 文件文件夹(每年在不同文件夹中按年份组织的 365 个文件)转换为 yearjuliandate相反,儒略日期需要是 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)
要处理日期,您应该使用 datetime
module。用 strptime
解析日期字符串。 return 儒略日期没有函数,但创建一个很容易:
def julian_day(dt):
jan1 = dt.replace(month=1, day=1)
return 1 + (dt - jan1).days
使用 '%j specifier
以及 datetime.strptime
和 os.rename
以及各种 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'
首先你必须拆分文件名以获得每个重要部分:
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)
我正在尝试编写一个 python 脚本来将文件名中包含 yearmonthdate 的 .asc 文件文件夹(每年在按年份组织的不同文件夹中的 365 个文件)转换为 yearjuliandate相反,儒略日期需要是 3 位数字(即 1 = 001)。 它们的格式是:ETos19810101.asc。 我希望它们是:ETos1981001.asc
如何在 Python 中编写此代码,以便遍历每个文件并将其转换为正确的儒略日?
我正在尝试编写一个 Python 脚本来将文件名中包含 yearmonthdate 的 .asc 文件文件夹(每年在不同文件夹中按年份组织的 365 个文件)转换为 yearjuliandate相反,儒略日期需要是 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)
要处理日期,您应该使用 datetime
module。用 strptime
解析日期字符串。 return 儒略日期没有函数,但创建一个很容易:
def julian_day(dt):
jan1 = dt.replace(month=1, day=1)
return 1 + (dt - jan1).days
使用 '%j specifier
以及 datetime.strptime
和 os.rename
以及各种 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'
首先你必须拆分文件名以获得每个重要部分:
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)