Kendall Weihe
Kendall Weihe

Reputation: 2075

Replace double backslash in string literal with single backslash

I'm trying to print a string that contains double backslash (one to escape the other) such that only one of the backslashes are printed. I thought this would happen automatically, but I must be missing some detail.

I have this little snippet:

for path in self.tokenized:
    pdb.set_trace()
    print(self.tokenized[path])

When I debug with that pdb.set_trace() I can see that my strings have double backslashes, and then I enter continue to print the remainder and it prints that same thing.

> /home/kendall/Development/path-parser/tokenize_custom.py(82)print_tokens()
-> print(self.tokenized[path])
(Pdb) self.tokenized[path]
['c:', '\\home', '\\kendall', '\\Desktop', '\\home\\kendall\\Desktop']
(Pdb) c
['c:', '\\home', '\\kendall', '\\Desktop', '\\home\\kendall\\Desktop']

Note that I'm writing a parser that parses Windows file paths -- thus the backslashes.

This is what it looks like to run the program:

kendall@kendall-XPS-8500:~/Development/path-parser$ python main.py -f c:\\home\\kendall\\Desktop

Upvotes: 1

Views: 541

Answers (1)

RoadieRich
RoadieRich

Reputation: 6586

The issue you are having is that you're printing a list, which only knows one way to stringify its contents: repr. repr is only designed for debugging use. Idiomatically, when possible (classes are a notable exception), it outputs a syntactically valid python expression that can be directly fed into the interpretter to reproduce the original object - hence the escaped backslashes.

Instead, you need to loop through each list, and print each string individually.

You can use str.join() to do this for you.

To get the exact same output, minus the doubled backslashes, you'd need to do something like:

print("[{0}]".format(", ".join(self.tokenized[path])))

Upvotes: 2

Related Questions