web-dev-qa-db-fra.com

Imprimer une chaîne brute de variable? (ne pas avoir les réponses)

J'essaie de trouver un moyen d'imprimer une chaîne sous forme brute à partir d'une variable. Par exemple, si j'ajoute une variable d'environnement à Windows pour un chemin d'accès, qui pourrait ressembler à 'C:\Windows\Users\alexb \', je sais que je peux le faire:

print(r'C:\\Windows\Users\alexb\')

Mais je ne peux pas mettre un r devant une variable .... pour isntance

test = 'C:\\Windows\Users\alexb\'
print(rtest)

Clairement voudrait juste essayer d'imprimer le test

Je sais aussi theres

test = 'C:\\Windows\Users\alexb\'
print(repr(test))

Mais cela retourne 'C:\Windows\Users\x07lexb' Comme

test = 'C:\\Windows\Users\alexb\'
print(test.encode('string-escape'))

Alors je me demandais s’il n’y avait aucun moyen élégant de créer une variable contenant ce chemin, d’afficher RAW, en utilisant toujours le test. Ce serait bien si c'était juste

print(raw(test))

Mais ce n'est pas :(

28
aescript

J'ai eu un problème similaire et je suis tombé sur cette question, et je sais grâce à la answer de Nick Olson-Harris que la solution réside dans le changement de chaîne. 

Deux façons de le résoudre:

  1. Obtenez le chemin que vous voulez en utilisant des fonctions python natives, par exemple:

    test = os.getcwd() # In case the path in question is your current directory
    print(repr(test))
    

    Cela le rend indépendant de la plate-forme et cela fonctionne maintenant avec .encode. S'il s'agit d'une option pour vous, c'est la solution la plus élégante. 

  2. Si votre chaîne n'est pas un chemin, définissez-la d'une manière compatible avec les chaînes python, dans ce cas en échappant vos barres obliques inverses:

    test = 'C:\\Windows\\Users\\alexb\\'
    print(repr(test))
    
16
OlavRG

Vous ne pouvez pas transformer une chaîne existante "raw". Le préfixe r sur les littéraux est compris par le analyseur ; il lui dit d'ignorer les séquences d'échappement de la chaîne. Cependant, une fois qu'un littéral de chaîne a été analysé, il n'y a pas de différence entre une chaîne brute et une chaîne "normale". Si vous avez une chaîne contenant une nouvelle ligne, par exemple, il est impossible de savoir au moment de l'exécution si cette nouvelle ligne provient de la séquence d'échappement \n, d'une nouvelle ligne littérale dans une chaîne à triple guillemet (peut-être même une chaîne brute!), De en appelant chr(10), en le lisant à partir d’un fichier, ou de tout autre moyen que vous pourriez trouver. L'objet de chaîne réel construit à partir de l'une de ces méthodes est identique.

16
Nick Olson-Harris

Supprimez les caractères d'échappement avant de stocker ou de manipuler la chaîne brute: 

Vous pouvez modifier les barres obliques inverses du chemin '\' pour les faire suivre avant de les stocker dans une variable. Les barres obliques n'ont pas besoin d'être échappées: 

>>> mypath = os.getcwd().replace('\\','/')  
>>> os.path.exists(mypath)  
True  
>>>   
4
DrawT

En général, pour créer une chaîne brute à partir d'une variable chaîne, j'utilise ceci:

string = "C:\\Windows\Users\alexb"

raw_string = r"{}".format(string)

sortie:

'C:\\\\Windows\\Users\\alexb'
0
Samer Alkhabbaz

Votre chaîne particulière ne fonctionnera pas comme tapé à cause des caractères d’échappement à la fin\", ne lui permettra pas de se fermer sur la citation.

Peut-être que je me trompe juste sur celui-là parce que je suis encore très novice en python, alors si corrigez-moi, mais si vous le modifiez légèrement, la fonction repr () se chargera de reproduire toute chaîne stockée dans un fichier. variable sous forme de chaîne brute.

Vous pouvez le faire de deux manières:

>>>print("C:\\Windows\Users\alexb\\")

C:\Windows\Users\alexb\

>>>print(r"C:\\Windows\Users\alexb\\")
C:\\Windows\Users\alexb\\

Stockez-le dans une variable:

test = "C:\\Windows\Users\alexb\\"

Utilisez repr ():

>>>print(repr(test))
'C:\\Windows\Users\alexb\\'

ou remplacement de chaîne avec% r 

print("%r" %test)
'C:\\Windows\Users\alexb\\'

La chaîne sera reproduite avec des guillemets simples, vous devrez donc les enlever ensuite.

0
Bryant Sullivan