Search code examples
pythonpython-2.7timejulian-date

Convert YYYYMMDD filename to YYYYJD


I'm trying to write a python script to convert a folder of .asc files (365 files for every year in different folders organized by year) that have the yearmonthdate in their filename to have the yearjuliandate instead and the julian date needs to be 3 digits (ie 1 = 001). The format they are in: ETos19810101.asc. I want them to be as: ETos1981001.asc

How do I write this in Python where I can iterate over each file and convert it to the correct julian day?

I'm trying to write a Python script to convert a folder of .asc files (365 files for every year in different folders organized by year) that have the yearmonthdate in their filename to have the yearjuliandate instead and the julian date needs to be 3 digits (ie 1 = 001).

  • The format they are in: ETos19810101.asc
  • I want them to be as: ETos1981001.asc

How do I write this in Python where I can iterate over each file and convert it to the correct julian day?

I have this so far:

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)

Solution

  • Use the '%j specifier along with datetime.strptime and os.rename and the various os.path commands:

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

    You'll probably want a bit of handling around that and adjust to take into account your path, but that's the general principle.