Strange path separators on Windows

11,192

Solution 1

The backslash is an escape character when the next character combination would result in a special meaning. Take the following examples:

>>> '\r'
'\r'
>>> '\n'
'\n'
>>> '\b'
'\x08'
>>> '\c'
'\\c'
>>>

r, n, and b all have special meanings when preceded by a backslash. The same is true for t, which would produce a tab. You either need to A. Double all your backslashes, for consistency, because '\\' will produce a backslash, or, B, use raw strings: r'c:\path\to\my\file.txt'. The preceding r will prompt the interpreter not to evaluate back slashes as escape sequences, preventing the \t from appearing as a tab.

Solution 2

You need to escape backslashes in paths with an extra backslash... like you've done for '\\test1.html'.

'\t' is the escape sequence for a tab character.

'D:\work\Kindle\srcs\test1.html is essentially 'D:\work\Kindle\srcs est1.html'.

You could also use raw literals, r'\test1.html' expands to:

'\\test1.html'

Solution 3

Use raw strings for Windows paths:

path = r'D:\work\Kindle\srcs\test1.html'

Otherwise the \t piece of your string will be interpreted as a Tab character.

Solution 4

The backslash \ is an escape character in Python. So your actual filepath is going to be D:\work\Kindle\srcs<tab>est1.html. Use os.sep, escape the backslashes with \\ or use a raw string by having r'some text'.

Solution 5

In addition to using a raw string (prefix string with the r character), the os.path module may be helpful to automatically provide OS-correct slashes when building a pathname.

Share:
11,192
Ian
Author by

Ian

Software developer

Updated on June 23, 2022

Comments

  • Ian
    Ian almost 2 years

    I an running this code:

    #!/usr/bin/python      coding=utf8
    #  test.py = to demo fault
    def loadFile(path):
        f = open(path,'r')
        text = f.read()
        return text
    if __name__ == '__main__':
        path = 'D:\work\Kindle\srcs\test1.html'
        document = loadFile(path)
        print len(document)
    

    It gives me a trackback

    D:\work\Kindle\Tests>python.exe test.py
    Traceback (most recent call last):
      File "test.py", line 11, in <module>
        document = loadFile(path)
      File "test.py", line 5, in loadFile
        f = open(path,'r')
    IOError: [Errno 22] invalid mode ('r') or filename: 'D:\\work\\Kindle\\srcs\test1.html'
    
    D:\work\Kindle\Tests>
    

    If I change the path line to

    path = 'D:\work\Kindle\srcs\\test1.html'
    

    (note the double \\) it all works fine.

    Why? Either the separator is '\' or it is not, not a mix?

    System. Windows 7, 64bit, Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32

    Checked - and all the backslashes appear correctly.