On Apr 3, 9:42 am, "Daniele Varrazzo" <[EMAIL PROTECTED]> wrote: > > > > 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" > > True > > > 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 > > digits. > > 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: > > import re > ver_re = re.compile(r"dx_ver_(\d+).(\d+).(\d+).zip") > > def getVer(fn): > """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] > > --Daniele > > 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[0]), key=lambda _: map(int, > >>> _[0].groups()))[-1][1] > > dx_ver_1.12.7.zip
Thanks all. Much to learn, but you have certainly helped me get started. jh -- http://mail.python.org/mailman/listinfo/python-list