Ś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?

Author: vaultah, 2010-06-02

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)
 122
Author: joaquin,
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"
 12
Author: S.Lott,
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ć:

  1. Python nie będzie przetwarzał sekwencji escape w literałach łańcuchowych poprzedzonych r lub R:

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python w systemie Windows również powinien obsługiwać ukośniki.

  3. You could use os.path.join ...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ... lub nowszy pathlib moduł

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    
 5
Author: vaultah,
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