Finding and copying files with python.

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • gtb

    #1

    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.z ip
    dx_ver_1.2.01.z ip
    dx_ver_1.12.7.z ip
    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

  • oliver@obeattie.com

    #2
    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" <goodTweetieB.. .@hotmail.comwr ote:
    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.z ip
    dx_ver_1.2.01.z ip
    dx_ver_1.12.7.z ip
    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

    Comment

    • kyosohma@gmail.com

      #3
      Re: Finding and copying files with python.

      On Apr 3, 8:21 am, "gtb" <goodTweetieB.. .@hotmail.comwr ote:
      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.z ip
      dx_ver_1.2.01.z ip
      dx_ver_1.12.7.z ip
      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

      Comment

      • gtb

        #4
        Re: Finding and copying files with python.

        On Apr 3, 8:31 am, kyoso...@gmail. com wrote:
        On Apr 3, 8:21 am, "gtb" <goodTweetieB.. .@hotmail.comwr ote:
        >
        >
        >
        >
        >
        >
        >
        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.z ip
        dx_ver_1.2.01.z ip
        dx_ver_1.12.7.z ip
        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

        Comment

        • kyosohma@gmail.com

          #5
          Re: Finding and copying files with python.

          On Apr 3, 8:47 am, "gtb" <goodTweetieB.. .@hotmail.comwr ote:
          On Apr 3, 8:31 am, kyoso...@gmail. com wrote:
          >
          >
          >
          On Apr 3, 8:21 am, "gtb" <goodTweetieB.. .@hotmail.comwr ote:
          >
          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.z ip
          dx_ver_1.2.01.z ip
          dx_ver_1.12.7.z ip
          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'pat htofiles\*.*.*. *.zip')

          and then sort that.

          Mike

          Comment

          • Steve Holden

            #6
            Re: Finding and copying files with python.

            gtb wrote:
            On Apr 3, 8:31 am, kyoso...@gmail. com wrote:
            >On Apr 3, 8:21 am, "gtb" <goodTweetieB.. .@hotmail.comwr ote:
            >>
            >>
            >>
            >>
            >>
            >>
            >>
            >>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.N N.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

            Comment

            • Daniele Varrazzo

              #7
              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.z ip
              dx_ver_1.2.01.z ip
              dx_ver_1.12.7.z ip
              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.z ip"
              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.listd ir('/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.z ip

              Comment

              • gtb

                #8
                Re: Finding and copying files with python.

                On Apr 3, 9:42 am, "Daniele Varrazzo" <daniele.varra. ..@gmail.com>
                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.z ip
                dx_ver_1.2.01.z ip
                dx_ver_1.12.7.z ip
                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.z ip"
                >
                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.listd ir('/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.z ip
                Thanks all. Much to learn, but you have certainly helped me get
                started.

                jh

                Comment

                Working...