Ścieżka Windows w Pythonie
Jaki jest najlepszy sposób na reprezentowanie katalogu Windows, na przykład "C:\meshes\as"
? Próbowałem zmodyfikować skrypt, ale nigdy nie działa, ponieważ nie mogę uzyskać katalogu dobrze, zakładam, że z powodu '\'
działając jako znak ucieczki?
3 answers
Możesz używać zawsze:
'C:/mydir'
To działa zarówno w Linuksie jak i windows. Inne możliwości to
'C:\\mydir'
Jeśli masz problemy z niektórymi nazwami, możesz również spróbować surowych literałów łańcuchowych:
r'C:\mydir'
Jednak najlepszą praktyką jest użycie funkcji modułu os.path
, które zawsze wybierają właściwą konfigurację dla Twojego systemu operacyjnego:
os.path.join(mydir, myfile)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-21 11:58:36
Użyj modułu os.path
.
os.path.join( "C:", "meshes", "as" )
Lub użyj nieprzetworzonych łańcuchów
r"C:\meshes\as"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-01 22:30:30
Tak, \
w Pythonie literały łańcuchowe oznaczają początek sekwencji ucieczki. Na swojej ścieżce masz poprawną dwuznakową sekwencję ucieczki \a
, która jest zwinięta do jednego znaku, który jest ASCII Bell :
>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess
Inne popularne sekwencje escape to \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']
Jak widać, we wszystkich tych przykładach odwrotny ukośnik i następny znak w literale zostały pogrupowane w jedną całość znak w ostatnim łańcuchu. Pełna lista sekwencji escape Pythona znajduje się tutaj .
Istnieje wiele sposobów, aby sobie z tym poradzić:
-
Python nie będzie przetwarzał sekwencji escape w literałach łańcuchowych poprzedzonych
r
lubR
:>>> r'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\as
Python w systemie Windows również powinien obsługiwać ukośniki.
-
You could use
os.path.join
...>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'
-
... lub nowszy
pathlib
moduł>>> from pathlib import Path >>> Path('C:', '/', 'meshes', 'as') WindowsPath('C:/meshes/as')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-31 13:49:32