Percorso di Windows in Python


152

Qual è il modo migliore per rappresentare una directory di Windows, ad esempio "C:\meshes\as"? Ho provato a modificare uno script ma non funziona mai perché non riesco a capire bene la directory, suppongo a causa del fatto che '\'agisca come personaggio di escape?

Risposte:


220

puoi usare sempre:

'C:/mydir'

funziona sia su Linux che su Windows. Altra possibilità è

'C:\\mydir'

se hai problemi con alcuni nomi puoi anche provare i letterali di stringa grezzi:

r'C:\mydir'

tuttavia è consigliabile utilizzare le os.pathfunzioni del modulo che selezionano sempre la configurazione corretta per il proprio sistema operativo:

os.path.join(mydir, myfile)

Da python 3.4 puoi anche usare il modulo pathlib . Ciò equivale a quanto sopra:

pathlib.Path(mydir, myfile)

o

pathlib.Path(mydir) / myfile

2
@Gareth, sono molto pigro e spesso mi ritrovo a usare '/'. Tuttavia, a lungo termine l'uso di os.path è più conveniente. Inoltre, consente di utilizzare mydir e myfile come variabili che è possibile modificare facilmente.
Joaquin,

13
L'unica cosa a cui fare attenzione con le corde grezze è che non possono finire con \
Douglas Leeder,

Puoi usare os.path.join () per rimuovere la necessità di terminare i percorsi con \.
Will Ediger,

1
Mi piace la sintassi r (stringa grezza). Utile se stai copiando un lungo percorso in cui di solito dovresti sostituire tutte le barre rovesciate con barre in avanti
peterb

la stringa non elaborata può terminare con \\ in modo da poter concatenare un file nel percorso: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + file, 'r', encoding = 'utf-8') come f:
Max Kleiner

20

Usa il os.pathmodulo.

os.path.join( "C:", "meshes", "as" )

O usa stringhe grezze

r"C:\meshes\as"

Vorrei anche raccomandare spazi nel percorso o nei nomi dei file. E potresti usare doppie barre rovesciate nelle corde.

"C:\\meshes\\as.jpg"

11
os.path.join potrebbe non comportarsi come previsto quando un componente è una lettera di unità, poiché i percorsi relativi sono consentiti anche allora. (Il risultato della prima riga è 'C: meshes \\ as' su Windows.)
dash-tom-bang

Il commento di @ dash-tom-bang è davvero importante. È la cosa giusta da fare "C:\"come prima voce? Questo rovina un po 'di pulizia dell'uso join?
Jack O'Connor,

1
@ JackO'Connor è quello che faccio. Certamente non vuoi mettere "C:\"al centro il nome del file. Inoltre, puoi utilizzare os.path.normpathprima o dopo un join, per assicurarti che il percorso venga stampato correttamente.
Agostino,

ma non funziona neanche. Ciò che funziona èos.path.join( "C:\\", "meshes", "as" )
Jean-François Fabre

17

Sì, \in stringhe di Python i letterali indicano l'inizio di una sequenza di escape. Nel tuo percorso hai una sequenza di escape di due caratteri valida \a, che è compressa in un carattere che è ASCII Bell :

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

Altre sequenze di escape comuni includono \t(tab), \n(avanzamento riga), \r(ritorno a capo):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

Come puoi vedere, in tutti questi esempi la barra rovesciata e il carattere successivo nel letterale sono stati raggruppati per formare un singolo carattere nella stringa finale. L'elenco completo delle sequenze di escape di Python è qui .

Esistono diversi modi per gestirlo:

  1. Python non elaborerà le sequenze di escape in valori letterali stringa con prefisso roR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python su Windows dovrebbe gestire anche le barre in avanti.

  3. Puoi usare os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ... o il modulo più recentepathlib

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    

-1

Usa PowerShell

In Windows, puoi utilizzare il /tuo percorso proprio come Linux o macOS in tutti i luoghi purché utilizzi PowerShell come interfaccia della riga di comando. Viene preinstallato su Windows e supporta molti comandi Linux come lscommand.

Se si utilizza il Prompt dei comandi di Windows (quello che appare quando si digita il cmdmenu Start di Windows), è necessario specificare i percorsi \appena all'interno di esso. Puoi usare i /percorsi in tutti gli altri posti (editor di codice, modalità interattiva Python, ecc.).


-1

Nel caso in cui desideri incollare il percorso di Windows da un'altra fonte (ad esempio Esplora file), puoi farlo tramite la input()chiamata nella console di Python:

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

Quindi copia il risultato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.