Come scrivere stringhe letterali in Python senza doverle sfuggire?


97

C'è un modo per dichiarare una variabile stringa in Python in modo tale che tutto al suo interno venga automaticamente sottoposto a escape o abbia il suo valore di carattere letterale?

Sto Non chiedendo come sfuggire le virgolette con tagli, questo è ovvio. Quello che sto chiedendo è un modo generico per rendere letterale tutto in una stringa in modo da non dover passare manualmente attraverso ed eseguire l'escape da tutto per stringhe molto grandi. Qualcuno sa di una soluzione? Grazie!

Risposte:


125

Valori letterali stringa non elaborati:

>>> r'abc\dev\t'
'abc\\dev\\t'

69

Se hai a che fare con stringhe molto grandi, in particolare stringhe multilinea, tieni presente la sintassi delle virgolette :

a = r"""This is a multiline string
with more than one line
in the source code."""

1
Questo costrutto introduce caratteri di interruzione di riga? Cioè, la variabile aconterrà una stringa con due caratteri di interruzione di riga?
MadPhysicist

7
@MadPhysicist: Sì, la stringa risultante conterrà due nuove righe nel caso precedente.
Greg Hewgill

Inteso. E se una 'split ()' viene utilizzata su questa stringa, verrà divisa per linee per impostazione predefinita?
MadPhysicist

1
@MadPhysicist L'impostazione predefinita per .split () è di dividere per spazi bianchi e le nuove righe sono spazi bianchi.
Greg Hewgill

1
L'ho usato prima e funziona bene. Due cose da tenere presente: sono inclusi i rientri (spazi) sulle altre righe, il che è desiderabile; se la stringa lunga "si conclude con """" un errore , perché l'intera cosa finirà con il che è un errore di sintassi.
Nagev

9

Non vi è nulla di simile. Sembra che tu voglia qualcosa come "qui documenti" in Perl e nelle shell, ma Python non ce l'ha.

Usare stringhe grezze o stringhe multilinea significa solo che ci sono meno cose di cui preoccuparsi. Se usi una stringa non elaborata, devi comunque aggirare un terminale "\" e con qualsiasi soluzione di stringa dovrai preoccuparti della chiusura ", ',' '' o" "" se è inclusa nei tuoi dati .

Cioè, non c'è modo di avere la stringa

 '   ''' """  " \

memorizzato correttamente in qualsiasi stringa letterale Python senza escape interno di qualche tipo.



1

(Supponendo che non sia necessario inserire la stringa direttamente dal codice Python)

per aggirare il problema indicato da Andrew Dalke, digita semplicemente la stringa letterale in un file di testo e poi usa questo;

input_ = '/directory_of_text_file/your_text_file.txt' 
input_open   = open(input_,'r+')
input_string = input_open.read()

print input_string

Questo stamperà il testo letterale di tutto ciò che è nel file di testo, anche se lo è;

 '   ''' """   \

Non è divertente o ottimale, ma può essere utile, soprattutto se hai 3 pagine di codice che avrebbero avuto bisogno dell'escape dei caratteri.


-1

se la stringa è una variabile, usa il. metodo repr su di esso:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'

Non è considerato un cattivo stile, però?
shah.shah

cosa, cetriolini?
markling

1
puoi usare repr(s)invece per uno stile migliore
xuiqzy
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.