python - Hvorfor bruger os.path både '\' og '/'?

Indlæg af Hanne Mølgaard Plasc

Problem



Når jeg får os.path.dirname() af en fil på Windows, bruger den/tegnet (konverteres til \ ved Windows), men så når jeg os.path.join() den vej med andre ting bruger den \ tegn som forventet).


import os

cwd = os.path.dirname(\_\_file\_\_)
print(cwd)                            # C:/Users/me/Documents/dir1
parent\_dir = os.path.join(cwd, '..')
print(parent\_dir)                     # C:/Users/me/Documents/dir1..


Windows håndterer dette helt fint. Som pr MSDN: [12]



  Fil I/O-funktioner i Windows API konvertere '/' til '\' som en del af konverteringen af ​​navnet til et NT-stilnavn, undtagen når du bruger '\\? \' Præfiks som beskrevet i de følgende afsnit.



Men hvorfor forekommer brugen af ​​begge skråstreger i første omgang?


edits:


Jeg kører kommandoen ved hjælp af python myfile.py fra Cygwin shell.


Jeg bruger Anaconda3 distributionen, som er installeret på C:UsersmeAppDataLocalContinuumAnaconda3python.exe. [13]


λ which python
/cygdrive/c/Users/me/AppData/Local/Continuum/Anaconda3/python

Bedste reference


Siden du løber fra cygwin, er stierne ikke native, men ændret for cygwin for at kunne fungere korrekt (MSYS gør det samme).


Så som en bivirkning, når python beder om den aktuelle fil, returneres den med skråstreger.


MEN anaconda er stadig en indbygget Windows distribution, hvilket forklarer at du får (native os.sep) når du tilslutter strenge.


For at få \_\_file\_\_ sti med native separatorer ( her), gør bare:


os.path.normpath(\_\_file\_\_)