Finding and copying files with python.
daniele.varrazzo at gmail.com
Tue Apr 3 16:42:49 CEST 2007
> > > I wish to copy the highest version number of a file from directory \
> > > \
> > > \fileserver\D:\scripts to C:\scripts where the file names are of the
> > > form
> > > filename_MM.NN.SS.zip, where MM, NN, and SS can be one to three
> > > digits.
> > > Example directory:
> > > other.zip
> > > dx_ver_1.1.63.zip
> > > dx_ver_1.2.01.zip
> > > dx_ver_1.12.7.zip
> > > temp.txt
> > > Does python have string matching routines that would find the bottom
> > > listed zip file and/or file copying routines?
> > You could just use string slicing to cut off the first 7 characters
> > and have the numbers available to compare. There's also the os.stat
> > module to find the last modified date of the file. You might be able
> > to use the glob module to grab a list of the files and then sort the
> > list too.
Comparing the version strings is not enough: you have to convert the
parts into integers, because else:
>>> "dx_ver_1.12.7.zip" < "dx_ver_1.2.1.zip"
> Thanks for posting folks. I didn't make my question clear. Before I
> sort the files I need to ensure that I am only sorting the files that
> match the profile of "filename_MM.NN.SS.zip", where MM, NN, and SS can
> be one to three
Match the file names against the pattern "dx_ver_(\d+).(\d+).(\d
+).zip". You may also use the glob function, but then you will have to
parse the version number from the file name anyway: with the regexp
you can use match.groups() to get the version number.
You can do:
ver_re = re.compile(r"dx_ver_(\d+).(\d+).(\d+).zip")
"""Return a *comparable* file version, None for bad file names"""
m = ver_re.match(fn)
return m and map(int, m.groups())
print sorted(os.listdir('/path/to/wherever'), key=getVer)[-1]
P.S. I guess in Obfuscated Python one would write something like:
>>> print sorted((pair for pair in ((re.match(r"dx_ver_(\d+).(\d+).(\d+).zip", fn), fn) for fn in os.listdir('/path/to/wherever')) if pair), key=lambda _: map(int, _.groups()))[-1]
More information about the Python-list