2010-03-11 17 views
29

in python, data una variabile che contiene una stringa c'è un modo rapido per lanciarlo in un'altra variabile stringa raw?colata stringa grezza python

il seguente codice dovrebbe illustrare cosa im dopo ...

def checkEqual(x, y): 
    print True if x==y else False 

line1 = "hurr..\n..durr" 
line2 = r"hurr..\n..durr" 
line3 = "%r"%line1 

print "%s \n\n%s \n\n%s \n" % (line1, line2, line3) 

checkEqual(line2, line3)  #outputs False 

checkEqual(line2, line3[1:-1]) #outputs True 

Il più vicino che ho trovato finora è la bandiera di formattazione% r che sembra restituire una stringa grezzo sia pure entro virgolette singole virgolette. C'è un modo più semplice per farlo come un tipo di cosa line3 = raw(line1)?

+0

Si prega di non utilizzare la parola "cast". Python non ha una cosa del genere. Si desidera "trasformare" o "convertire" una stringa non elaborata in un'altra stringa. "veloce" non ha niente a che fare con questo. –

+2

'checkEqual' può essere semplicemente' return x == y' – pradyunsg

+1

Grazie a @Schoolboy per averlo indicato. Mi brucia sempre vedere qualcosa di ridondante come 'print True if True else False':/ – OozeMeister

risposta

61
"hurr..\n..durr".encode('string-escape') 
+6

nice one. str.encode() con i vari codec è esattamente quello che cercavo. 'Unicode-escape' in realtà risolve un altro problema che stavo facendo anche io. evviva – dave

+1

Questo non funziona per '\ w' ecc. –

+7

Ricevo un errore in Python3.3 LookupError: codifica sconosciuta: string-escape – Erik

3

Ancora un altro modo:

>>> s = "hurr..\n..durr" 
>>> print repr(s).strip("'") 
hurr..\n..durr 
+0

Che non funziona se 's' ha un' '' in esso –

+0

Dovrebbe essere ok se il '' 'è nel mezzo della stringa, ma non è sicuramente robusto (ad esempio è strambo con le stringhe Unicode) . – Seth

0
>>> v1 = 'aa\1.js' 
>>> re.sub(r'(.*)\.js', repr(v1).strip("'"), 'my.js', 1) 
'aa\\x01.js 

Ma

>>> re.sub(r'(.*)\.js', r'aa\1.js', 'my.js', 1) 
'aamy.js' 

E

>>> re.sub(r'(.*)\.js', raw(v1), 'my.js', 1) 
'aamy.js' 

E meglio metodo grezzo ESECUZIONE ntation

def raw(text): 
    """Returns a raw string representation of text""" 
    return "".join([escape_dict.get(char,char) for char in text]) 
1

Sopra è stato mostrato come codificare.

'hurr..\n..durr'.encode('string-escape') 

In questo modo verrà decodificato.

r'hurr..\n..durr'.decode('string-escape') 

Es.

In [12]: print 'hurr..\n..durr'.encode('string-escape') 
hurr..\n..durr 

In [13]: print r'hurr..\n..durr'.decode('string-escape') 
hurr.. 
..durr 

Ciò consente di "eseguire il cast/trasformare stringhe non elaborate" in entrambe le direzioni. Un caso pratico è quando il json contiene una stringa grezza e voglio stamparlo bene.

{ 
    "Description": "Some lengthy description.\nParagraph 2.\nParagraph 3.", 
    ... 
} 

Vorrei fare qualcosa del genere.

print json.dumps(json_dict, indent=4).decode('string-escape') 
Problemi correlati