I'm writing a Python script that accepts file paths as strings, parses them, appends a command name, and builds a list, which is then passed to subprocess.Popen()
for execution. This script is to handle both Unix and Windows file paths, and ultimately should run on both systems.
When I run this under Unix, if I give a Windows path that inadvertently contains an escape character (e.g. \Users\Administrator\bin
), Python will interpret the embedded \b
as the backspace character. I want to prevent that from happening.
As far as I know, there's no function or method to denote a string variable as a raw string. The 'r'
modifier only works for string constants.
So far, the closest I've been able to get is this:
winpath = "C:\Users\Administrator\bin"
winpath = winpath.replace('\b','\\b')
winpathlist = winpath.split('\\')
At this point, winpathlist should contain ['C:','Users','Administrator','bin']
, not ['C','Users','Administrator\x08in']
.
I can add additional calls to winpath.replace()
to handle the other escapes I might get -- \a
, \f
, \n
, \r
, \t
, \v
-- but not \x
.
Is there a more pythonic way to do this?
You can create a raw string by prepending r to the string literal notation
becomes
You can read some more here
If your
winpath
is hard-coded, you may want to user
before your string to indicate it is a "raw string".If
winpath
cannot be hardcoded, you can try to create a new string as:(which is just
repr(winpath)
, and won't really help you, asrepr("\bin")
is...)A solution would be to rebuild the string from scratch: you can find an example of function at that link, but the generic idea is:
and now,
raw("\bin")
gives you"\\bin"
(and not"\\x08in"
)...