Stripping parts of a path

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

    Stripping parts of a path

    Hi All,

    I just ran into an issue with the rstrip method when using it on path
    strings.

    When executing a function I have a need to strip off a portion of the
    current working directory and add on a path to a log file. Initially
    this worked great but then I added a branch in SVN which caused the path
    to contain 'LNCCWorkshop'. The rstrip() then began removing the
    characters 'shop' leaving an incorrect path to the log file. When I
    hard coded this path it worked okay but then did the same thing later in
    the file when I needed to point to a database. The code worked fine with
    a different path. Here are some code fragments.

    logfile=os.getc wd().rstrip('sr c/oship/atbldr')+'/oship/log/at_build_errors .log'

    this worked when the path was:
    /home/tim/ref_impl_python/TRUNK/oship/src/oship/atbldr

    the code above returns:
    /home/tim/ref_impl_python/TRUNK/oship/log/at_build_errors .log

    but when I tried a branches version that has the path:
    /home/tim/ref_impl_python/BRANCHES/LNCCWorkshop/oship/src/oship/atbldr

    it SHOULD return:
    /home/tim/ref_impl_python/BRANCHES/LNCCWorkshop/oship/log/at_build_errors .log

    but I get:
    /home/tim/ref_impl_python/BRANCHES/LNCCWork/oship/log/at_build_errors .log

    logfile=os.getc wd()
    print logfile is correct; but when I add the .rstrip('src/oship/atbldr')
    it also strips the 'shop' off of LNCCWorkshop and returns
    /home/tim/ref_impl_python/BRANCHES/LNCCWork/oship/log/at_build_errors .log

    I had two other people looking at this as we did troubleshooting and we
    could not determine the cause. It is repeatable with this path name.
    In resolution I renamed the branch to just LNCC and it works fine.

    Thoughts?

    Tim







    --
    *************** *************** *************** *************** **************
    Join the OSHIP project. It is the standards based, open source
    healthcare application platform in Python.
    Home page: https://launchpad.net/oship/
    Wiki: http://www.openehr.org/wiki/display/...loper%27s+page
    *************** *************** *************** *************** **************

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.7 (GNU/Linux)

    iD8DBQBIixGT2TF RV0OoZwMRAkxqAJ 9mGiYAsnhdGyTpS s90vwm6JYqKBQCg mvLh
    xLE9S3KUB/aTcG5QvP3T1jg=
    =IB+1
    -----END PGP SIGNATURE-----

  • Larry Bates

    #2
    Re: Stripping parts of a path

    Tim Cook wrote:
    Hi All,
    >
    I just ran into an issue with the rstrip method when using it on path
    strings.
    >
    When executing a function I have a need to strip off a portion of the
    current working directory and add on a path to a log file. Initially
    this worked great but then I added a branch in SVN which caused the path
    to contain 'LNCCWorkshop'. The rstrip() then began removing the
    characters 'shop' leaving an incorrect path to the log file. When I
    hard coded this path it worked okay but then did the same thing later in
    the file when I needed to point to a database. The code worked fine with
    a different path. Here are some code fragments.
    >
    logfile=os.getc wd().rstrip('sr c/oship/atbldr')+'/oship/log/at_build_errors .log'
    >
    this worked when the path was:
    /home/tim/ref_impl_python/TRUNK/oship/src/oship/atbldr
    >
    the code above returns:
    /home/tim/ref_impl_python/TRUNK/oship/log/at_build_errors .log
    >
    but when I tried a branches version that has the path:
    /home/tim/ref_impl_python/BRANCHES/LNCCWorkshop/oship/src/oship/atbldr
    >
    it SHOULD return:
    /home/tim/ref_impl_python/BRANCHES/LNCCWorkshop/oship/log/at_build_errors .log
    >
    but I get:
    /home/tim/ref_impl_python/BRANCHES/LNCCWork/oship/log/at_build_errors .log
    >
    logfile=os.getc wd()
    print logfile is correct; but when I add the .rstrip('src/oship/atbldr')
    it also strips the 'shop' off of LNCCWorkshop and returns
    /home/tim/ref_impl_python/BRANCHES/LNCCWork/oship/log/at_build_errors .log
    >
    I had two other people looking at this as we did troubleshooting and we
    could not determine the cause. It is repeatable with this path name.
    In resolution I renamed the branch to just LNCC and it works fine.
    >
    Thoughts?
    >
    Tim
    >
    >
    >
    >
    >
    >
    >
    Always helps to consult documentation when things don't work.

    Help on built-in function rstrip:

    rstrip(...)
    S.rstrip([chars]) -string or unicode

    Return a copy of the string S with trailing whitespace removed.
    If chars is given and not None, remove characters in chars instead.
    If chars is unicode, S will be converted to unicode before stripping


    If you give chars to rstrip() it removes all those characters from the string
    not that substring.

    -Larry

    Comment

    • Dan Stromberg

      #3
      Re: Stripping parts of a path

      On Sat, 26 Jul 2008 08:59:15 -0300, Tim Cook wrote:
      Hi All,
      >
      I just ran into an issue with the rstrip method when using it on path
      strings.
      >
      When executing a function I have a need to strip off a portion of the
      current working directory and add on a path to a log file. Initially
      this worked great but then I added a branch in SVN which caused the path
      to contain 'LNCCWorkshop'. The rstrip() then began removing the
      characters 'shop' leaving an incorrect path to the log file. When I
      hard coded this path it worked okay but then did the same thing later in
      the file when I needed to point to a database. The code worked fine with
      a different path. Here are some code fragments.
      >
      logfile=os.getc wd().rstrip('sr c/oship/atbldr')+'/oship/log/
      at_build_errors .log'
      >
      this worked when the path was:
      /home/tim/ref_impl_python/TRUNK/oship/src/oship/atbldr
      >
      the code above returns:
      /home/tim/ref_impl_python/TRUNK/oship/log/at_build_errors .log
      >
      but when I tried a branches version that has the path:
      /home/tim/ref_impl_python/BRANCHES/LNCCWorkshop/oship/src/oship/atbldr
      >
      it SHOULD return:
      /home/tim/ref_impl_python/BRANCHES/LNCCWorkshop/oship/log/
      at_build_errors .log
      >
      but I get:
      /home/tim/ref_impl_python/BRANCHES/LNCCWork/oship/log/
      at_build_errors .log
      >
      logfile=os.getc wd()
      print logfile is correct; but when I add the .rstrip('src/oship/atbldr')
      it also strips the 'shop' off of LNCCWorkshop and returns
      /home/tim/ref_impl_python/BRANCHES/LNCCWork/oship/log/
      at_build_errors .log
      >
      I had two other people looking at this as we did troubleshooting and we
      could not determine the cause. It is repeatable with this path name. In
      resolution I renamed the branch to just LNCC and it works fine.
      >
      Thoughts?
      >
      Tim
      Is this the Tim Cook I worked with at UCI?

      Anyway, I think the os.path module might have something for you. As a
      little bonus, it should produce code that works well with other operating
      systems, and should deal gracefully with repeated slashes.

      Comment

      • Tim Roberts

        #4
        Re: Stripping parts of a path

        Tim Cook <timothywayne.c ook@gmail.comwr ote:
        >
        >I just ran into an issue with the rstrip method when using it on path
        >strings.
        >
        >When executing a function I have a need to strip off a portion of the
        >current working directory and add on a path to a log file. Initially
        >this worked great but then I added a branch in SVN which caused the path
        >to contain 'LNCCWorkshop'. The rstrip() then began removing the
        >characters 'shop' leaving an incorrect path to the log file. When I
        >hard coded this path it worked okay but then did the same thing later in
        >the file when I needed to point to a database. The code worked fine with
        >a different path. Here are some code fragments.
        >
        >logfile=os.get cwd().rstrip('s rc/oship/atbldr')+'/oship/log/at_build_errors .log'
        This doesn't do what you think it does. The parameter to rstrip is a set:
        as long as the last character is in the set 'abcdhiloprs/', it will remove
        it and check the next one. All of the characters in "shop" are in that
        set.

        In a few minutes, I couldn't think of a clever one-liner to do this. You
        could do it with re.sub, but that seems like overkill.

        chk = '/src/oship/atbldr'
        cwd = os.getcwd()
        if cwd.endswith( chk ):
        cwd = cwd[:-len(chk)]
        --
        Tim Roberts, timr@probo.com
        Providenza & Boekelheide, Inc.

        Comment

        • Tim Cook

          #5
          Re: Stripping parts of a path


          On Sun, 2008-07-27 at 04:32 +0000, Tim Roberts wrote:
          This doesn't do what you think it does. The parameter to rstrip is a set:
          as long as the last character is in the set 'abcdhiloprs/', it will remove
          it and check the next one. All of the characters in "shop" are in that
          set.
          Thanks for all the replies.
          You are correct I misunderstood the docs. Finding and slicing works
          great.

          Cheers,
          Tim


          --
          *************** *************** *************** *************** **************
          Join the OSHIP project. It is the standards based, open source
          healthcare application platform in Python.
          Home page: https://launchpad.net/oship/
          Wiki: http://www.openehr.org/wiki/display/...loper%27s+page
          *************** *************** *************** *************** **************

          -----BEGIN PGP SIGNATURE-----
          Version: GnuPG v1.4.7 (GNU/Linux)

          iD8DBQBIjDCA2TF RV0OoZwMRAnNMAJ 9XM8o6A9EOTi1J3 I88gvp9WjYqVQCg mSTo
          S6oUOvgps+5rsL5 QtanW5BE=
          =wmzo
          -----END PGP SIGNATURE-----

          Comment

          Working...