Windows path in Python
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Cosmic Puzzle
--
Chapters
00:00 Windows Path In Python
00:21 Answer 1 Score 46
00:41 Accepted Answer Score 424
01:22 Answer 3 Score 37
02:33 Answer 4 Score 21
03:50 Thank you
--
Full question
https://stackoverflow.com/questions/2953...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #path #stringliterals
#avk47
ACCEPTED ANSWER
Score 424
You can use always:
'C:/mydir'
This works both in Linux and Windows.
Another possibility is:
'C:\\mydir'
If you have problems with some names you can also try raw string literals:
r'C:\mydir'
However, the best practice is to use the os.path module functions that always joins with the correct path separator (os.path.sep) for your OS:
os.path.join(mydir, myfile)
From python 3.4 you can also use the pathlib module. This is equivalent to the above:
pathlib.Path(mydir, myfile)
or:
pathlib.Path(mydir) / myfile
ANSWER 2
Score 46
Use the os.path module.
os.path.join( "C:", "meshes", "as" )
Or use raw strings
r"C:\meshes\as"
I would also recommend no spaces in the path or file names. And you could use double backslashes in your strings.
"C:\\meshes\\as.jpg"
ANSWER 3
Score 37
Yes, \ in Python string literals denotes the start of an escape sequence. In your path you have a valid two-character escape sequence \a, which is collapsed into one character that is ASCII Bell:
>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess
Other common escape sequences include \t (tab), \n (line feed), \r (carriage return):
>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']
As you can see, in all these examples the backslash and the next character in the literal were grouped together to form a single character in the final string. The full list of Python's escape sequences is here.
There are a variety of ways to deal with that:
Python will not process escape sequences in string literals prefixed with
rorR:>>> r'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\asPython on Windows should handle forward slashes, too.
You could use
os.path.join...>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'... or the newer
pathlibmodule>>> from pathlib import Path >>> Path('C:', '/', 'meshes', 'as') WindowsPath('C:/meshes/as')
ANSWER 4
Score 21
Use Path:
from pathlib import Path
data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "raw_data.txt"
print(file_to_open.read_text())
Path takes a path-like string and adjusts everything for the current OS, either Windows or Linux. For example, on Linux it would convert all backslashes to forward slashes, and on Windows it would do the reverse.
Full article: Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux
My experience:
- I spent 6 months using 
os.path.join(...), then switched tonormpath(...)then finally switched toPath(...). Having used all three, Path is the best of all worlds. 
Advantages of Path over os.path.join(...):
- Cleaner.
 - Less typing.
 - Easier to read the paths (i.e. more readable).
 - Can join two different paths using 
/(see above). - More modern.
 
Advantages of Path over normpath(...):
- Can join paths using 
/rather than having to fall back toos.path.join(...), with nested normpath calls to fix things up. - Cleaner.
 - Less typing.
 - Easier to read the paths (i.e. more readable).
 - Less chance of bugs when porting between Linux and Windows.
 - More modern.