Really, really annoying problem

Brett Lempereur a.lempereur
Wed Sep 20 17:30:06 EDT 2000


People seem to be missing the point!!

create a module with the code "print sys.argv[0]" to see what i mean

Dan Schmidt <dfan at harmonixmusic.com> wrote in message
news:wkn1h2n79i.fsf at turangalila.harmonixmusic.com...
> "Brett Lempereur" <a.lempereur[remove this|@|remove this]cableinet.co.uk>
writes:
>
> | Right, well for a start so I don't get everybody on my back again,
> | here's the code I'm using...
> |
> | [duplicated below]
> |
> | The function of this code is to append a filename to the directory
> | the module is in, I'll add more functionality later, but for the
> | minute this will do.
>
> You probably want to look at the os.path module; I bet it would make
> your life a lot easier..  For example, your function below could be
> rewritten as follows:
>
>   def addroot (text):
>       return os.path.join (os.path.dirname(sys.argv[0]), text)
>
> | Anyway, it does exactly what i want, but unexplainably, instead of
> | inserting the one "\" like it should, it inserts "\\" .  I can't
> | figure why this is hapenning. and would appreciate anybodies help
> |
> | thanks
>
> It works fine for me with Python 1.5.2 on win32:
>
>   import string
>   import sys
>
>   def addroot(text):
>     # Definitions
>     new_string = ""
>     arg = sys.argv[0]
>     split_arg = string.split(arg, '\\')
>     # Cycle through
>     for count in range(0, len(split_arg) - 1):
>         new_string = new_string + split_arg[count] + "\\"
>     new_string = new_string + text
>     # Return the reconstructed string
>     return new_string
>
>   print addroot(gronk)
>
>   $ python d:\src\py\foo.py
>   d:\src\py\gronk
>
> Can you provide a complete program that demonstrates the problem?
>
> My guess is that when you run your program, sys.argv[0] actually has
> double backslashes in it, so that every other element of split_arg is
> the empty string, so that you get two backslashes in a row when you
> try to join it with backslashes.  But that's just a guess.
>
> By the way, if you're interested,
>
>   for count in range(0, len(split_arg) - 1):
>     new_string = new_string + split_arg[count] + "\\"
>   new_string = new_string + text
>
> is probably more idiomatically written as
>
>   new_string = string.join(split_arg[:-1], "\\") + "\\" + text
>
> There are two changes here:
>
> 1) It's often more straightforward to loop directly over the elements
>    of the array, instead of over their indices. split_arg[:-1] is all
>    the elements of split_arg, starting at 0 and ending at one from the
>    end.
>
> 2) string.join() already exists for joining lots of strings together
>    with a separator, so we use that.
>
> --
>                  Dan Schmidt | http://www.dfan.org
> Honest Bob CD now available! | http://www.dfan.org/honestbob/cd.html




More information about the Python-list mailing list