web-dev-qa-db-fra.com

Comment puis-je supprimer le dernier caractère d'une chaîne en python?

J'ai un chemin de fichier sous forme de chaîne et essayant de supprimer le dernier '/' de la fin.

my_file_path = '/home/ro/A_Python_Scripts/flask-auto/myDirectory/scarlett Johanson/1448543562.17.jpg/'

Je l'ai essayé avec regex, mais il continue à supprimer tous les '/'. Existe-t-il un moyen plus simple de supprimer le dernier caractère sans regex?

10
user5460786

Comme vous le dites, vous n'avez pas besoin d'utiliser une expression régulière pour cela. Vous pouvez utiliser rstrip .

my_file_path = my_file_path.rstrip('/')

S'il y a plus d'un / à la fin, cela les supprimera tous, par exemple. '/file.jpg//' -> '/file.jpg'. De votre question, je suppose que ça irait.

12
Alasdair

Le plus simple est

comme l'a souligné @greggo

string="mystring";
string[:-1]
8
sarath joseph

Vous pouvez utiliser String.rstrip.

result = string.rstrip('/')
2
joksnet

Pour un chemin, utilisez os.path.abspath 

import os    
print os.path.abspath(my_file_path)
2
djangoliv

La méthode la plus simple consiste à utiliser slice . Si x est votre variable chaîne, x [: - 1] renverra la variable chaîne sans le dernier caractère . (BTW, x [-1] est le dernier caractère de la variable chaîne) Vous recherchez

my_file_path = '/ home/ro/A_Python_Scripts/flask-auto/monRépertoire/scarlett Johanson/1448543562.17.jpg /' mon_fichier_fichier = mon_fichier_fichier [: - 1]

1
SteveOwens

Nul besoin d’utiliser regex, si nécessaire, essayez - Utilisez le modèle r'(/)(?=$)' qui capture le dernier / et remplacez-le par r'', c’est-à-dire un caractère vide.

>>>re.sub(r'(/)(?=$)',r'','/home/ro/A_Python_Scripts/flask-auto/myDirectory/scarlett Johanson/1448543562.17.jpg/')
>>>'/home/ro/A_Python_Scripts/flask-auto/myDirectory/scarlett Johanson/1448543562.17.jpg'
0
SIslam

Réponse à la question: pour supprimer le dernier caractère, utilisez simplement: string = string[:-1].

Si vous souhaitez supprimer le dernier '\' s'il en existe un (ou s'il y en a plusieurs):

while string[-1]=='\\':
    string = string[:-1]

Si c'est un chemin, utilisez les fonctions os.path:

dir = "dir1\\dir2\\file.jpg\\"   #I'm using windows by the way
os.path.dirname(dir)

bien que j'ajoute une barre oblique à la fin pour éviter de rater le nom du fichier s'il n'y a pas de barre oblique à la fin de la chaîne d'origine

dir = "dir1\\dir2\\file.jpg"
os.path.dirname(dir + "\\")

Lorsque vous utilisez abspath, (si le chemin n'est pas absolu, je suppose), le répertoire de travail en cours sera ajouté au chemin.

os.path.abspath(dir)
0
tglaria

Pour supprimer le dernier caractère, utilisez simplement une tranche: my_file_path[:-1]. Si vous souhaitez uniquement supprimer un jeu de caractères spécifique, utilisez my_file_path.rstrip('/'). Si vous voyez la chaîne sous la forme d'un chemin d'accès, l'opération est os.path.dirname . Si le chemin est en fait un nom de fichier, je me demande plutôt d'où vient la barre oblique supplémentaire. 

0
Yann Vernier