Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Finding and copying files with python.

Reply
Thread Tools

Finding and copying files with python.

 
 
gtb
Guest
Posts: n/a
 
      04-03-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?

A little pointer or two would be much appreciated.

Thanks,

jh

 
Reply With Quote
 
 
 
 
oliver@obeattie.com
Guest
Posts: n/a
 
      04-03-2007
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" <(E-Mail Removed)> 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



 
Reply With Quote
 
 
 
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      04-03-2007
On Apr 3, 8:21 am, "gtb" <(E-Mail Removed)> 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

 
Reply With Quote
 
gtb
Guest
Posts: n/a
 
      04-03-2007
On Apr 3, 8:31 am, (E-Mail Removed) wrote:
> On Apr 3, 8:21 am, "gtb" <(E-Mail Removed)> 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

 
Reply With Quote
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      04-03-2007
On Apr 3, 8:47 am, "gtb" <(E-Mail Removed)> wrote:
> On Apr 3, 8:31 am, (E-Mail Removed) wrote:
>
>
>
> > On Apr 3, 8:21 am, "gtb" <(E-Mail Removed)> 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

 
Reply With Quote
 
Steve Holden
Guest
Posts: n/a
 
      04-03-2007
gtb wrote:
> On Apr 3, 8:31 am, (E-Mail Removed) wrote:
>> On Apr 3, 8:21 am, "gtb" <(E-Mail Removed)> 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

 
Reply With Quote
 
Daniele Varrazzo
Guest
Posts: n/a
 
      04-03-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"

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

 
Reply With Quote
 
gtb
Guest
Posts: n/a
 
      04-03-2007
On Apr 3, 9:42 am, "Daniele Varrazzo" <(E-Mail Removed)>
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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Copying files to Vista Program Files in ruby script Shawn Mcclain Ruby 0 09-28-2007 09:21 PM
Needed APIs: For copying file and finding Disk Usage Sankar C Programming 12 12-06-2006 10:04 PM
Needed APIs: For copying file and finding Disk Usage Sankar C Programming 8 12-05-2006 03:04 PM
Finding Server... Finding Host.... enough already!!! Leesa_Tay@softhome.net Computer Support 2 01-20-2006 10:23 AM
XCOPY is not copying ascx files while it copies .dll files c.verma@gmail.com ASP .Net 0 01-14-2005 07:29 PM



Advertisments