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.