Python, aggiungi la barra finale alla stringa della directory, sistema operativo indipendentemente


114

Come posso aggiungere una barra finale ( /per * nix, \per win32) a una stringa di directory, se la barra finale non è già presente? Grazie!


8
Dovresti usare il os.pathmodulo ( docs.python.org/library/os.path.html ) invece di manipolare direttamente le stringhe. Utilizzare os.path.joinper concatenare i componenti del percorso.
kennytm

2
grazie Tim per aver ricordato, dopo aver letto il documento, penso che la risposta alla mia vera domanda sia os.path.join (cartella, nome file) e non devo preoccuparmi affatto della barra. amico,
adorerò il

2
Ecco perché ho chiesto: non farlo da solo, usa os.path.joine lascia che la libreria standard trovi il separatore di percorso corretto.
Tim Pietzcker

2
@ S.Lott non lo considererò "cattivo". la domanda è una domanda valida di per sé. è solo una parte di una domanda più grande (si può dire reale).
ohho

6
A seconda di cosa stai facendo, tuttavia, la domanda potrebbe comunque interessarti. Ad esempio, se stai usando Python per fornire input a un altro programma, potresti avere un caso in cui un argomento necessita di un percorso con barra. Potrebbe essere fuori dal tuo controllo; ed è un caso d'uso perfettamente valido per la risposta di Marco di seguito.
Chris Krycho

Risposte:


180

os.path.join(path, '') aggiungerà la barra finale se non è già presente.

Puoi fare os.path.join(path, '', '')o os.path.join(path_with_a_trailing_slash, '')e otterrai comunque solo una barra finale.


2
Aggiunge anche una barra quando pathsembra essere un file piuttosto che una directory. È leggermente scomodo.
Martin

27

Dato che vuoi connettere una directory e un nome di file, usa

os.path.join(directory, filename)

Se vuoi sbarazzarti dei .\..\..\blah\percorsi, usa

os.path.join(os.path.normpath(directory), filename)

11

Puoi farlo manualmente:

path = ...

import os
if not path.endswith(os.path.sep):
    path += os.path.sep

Tuttavia, di solito è molto più pulito da usare os.path.join.


-1

Potresti usare qualcosa del genere:

os.path.normcase(path)
    Normalize the case of a pathname. On Unix and Mac OS X, this returns the path unchanged; on case-insensitive filesystems, it converts the path to lowercase. On Windows, it also converts forward slashes to backward slashes.

Altrimenti potresti cercare qualcos'altro in questa pagina

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.