Re: Finding and copying files with python.
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
Re: Finding and copying files with python.
> > > 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 -- http://mail.python.org/mailman/listinfo/python-list
Re: Finding and copying files with python.
gtb wrote: > On Apr 3, 8:31 am, [EMAIL PROTECTED] wrote: >> On Apr 3, 8:21 am, "gtb" <[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? >>> A little pointer or two would be much appreciated. >>> Thanks, >>> jh >> 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. >> >> Mike > > 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. > > Thanks again, > > jh > OK, well look at the glob module to get a list of the filenames. You are going to have to be careful doing the sort, however, because a simple string comparison won't work for numbers of differing lengths. One way would be to define a function that extracts the numeric components from a filename and produces a three-element tuple or list. Then pass this function to sort() as the "key" argument. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden Recent Ramblings http://holdenweb.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Finding and copying files with python.
On Apr 3, 8:47 am, "gtb" <[EMAIL PROTECTED]> wrote: > On Apr 3, 8:31 am, [EMAIL PROTECTED] wrote: > > > > > On Apr 3, 8:21 am, "gtb" <[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? > > > > A little pointer or two would be much appreciated. > > > > Thanks, > > > > jh > > > 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. > > > Mike > > 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. > > Thanks again, > > jh Then you probably need to use the glob module and the re module. You may even be able to just use the glob module by doing something like: filenames = glob.glob(r'pathtofiles\*.*.*.*.zip') and then sort that. Mike -- http://mail.python.org/mailman/listinfo/python-list
Re: Finding and copying files with python.
On Apr 3, 8:31 am, [EMAIL PROTECTED] wrote: > On Apr 3, 8:21 am, "gtb" <[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? > > > A little pointer or two would be much appreciated. > > > Thanks, > > > jh > > 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. > > Mike 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. Thanks again, jh -- http://mail.python.org/mailman/listinfo/python-list
Re: Finding and copying files with python.
On Apr 3, 8:21 am, "gtb" <[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? > > A little pointer or two would be much appreciated. > > Thanks, > > jh 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. Mike -- http://mail.python.org/mailman/listinfo/python-list
Re: Finding and copying files with python.
Just sort them and then select the bottom one from a list by using a negative indices. I.e.: list[-1] Would return the bottom result out of a list On Apr 3, 2:21 pm, "gtb" <[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? > > A little pointer or two would be much appreciated. > > Thanks, > > jh -- http://mail.python.org/mailman/listinfo/python-list
Finding and copying files with python.
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? A little pointer or two would be much appreciated. Thanks, jh -- http://mail.python.org/mailman/listinfo/python-list