Bagaimana cara menulis string literal dengan python tanpa harus menghindarinya?

98

Apakah ada cara untuk mendeklarasikan variabel string dalam python sehingga semua yang ada di dalamnya secara otomatis di-escape, atau memiliki nilai karakter literal?

Saya tidak bertanya bagaimana cara menghindar dari tanda kutip dengan garis miring, itu jelas. Apa yang saya minta adalah cara tujuan umum untuk membuat semuanya dalam string literal sehingga saya tidak harus secara manual melalui dan melarikan diri semuanya untuk string yang sangat besar. Ada yang tahu solusinya? Terima kasih!

kjakeb
sumber

Jawaban:

125

Literal string mentah:

>>> r'abc\dev\t'
'abc\\dev\\t'
SilentGhost
sumber
71

Jika Anda berurusan dengan string yang sangat besar, khususnya string multiline, perhatikan sintaks kutip tiga :

a = r"""This is a multiline string
with more than one line
in the source code."""
Greg Hewgill
sumber
1
Apakah konstruksi ini memperkenalkan karakter baris baru? Artinya, variabel aakan berisi string dengan dua karakter pemisah baris?
MadPhysicist
7
@MadPhysicist: Ya, string yang dihasilkan akan berisi dua baris baru dalam kasus di atas.
Greg Hewgill
Dimengerti. Dan jika 'split ()' digunakan pada string ini, apakah itu akan dipisahkan menurut garis secara default?
MadPhysicist
1
@MadPhysicist Default untuk .split () adalah untuk memisahkan dengan spasi, dan baris baru adalah spasi.
Greg Hewgill
1
Saya telah menggunakan ini sebelumnya dan berfungsi dengan baik. Dua hal yang harus diperhatikan: lekukan (spasi) di baris lain disertakan yang diinginkan; jika string panjang kebetulan diakhiri dengan "tidak baik, karena semuanya akan berakhir dengan """" kesalahan sintaksis.
Nagev
9

Tidak ada hal seperti itu. Sepertinya Anda menginginkan sesuatu seperti "di sini dokumen" di Perl dan cangkang, tetapi Python tidak memilikinya.

Menggunakan string mentah atau string multiline berarti lebih sedikit hal yang perlu dikhawatirkan. Jika Anda menggunakan string mentah, Anda masih harus bekerja di sekitar terminal "\" dan dengan solusi string apa pun Anda harus khawatir tentang penutupan ", ',' '' atau" "" jika disertakan dalam data Anda .

Artinya, tidak ada cara untuk memiliki string tersebut

 '   ''' """  " \

disimpan dengan benar dalam literal string Python apa pun tanpa pelolosan internal apa pun.

Andrew Dalke
sumber
1

(Dengan asumsi Anda tidak perlu memasukkan string langsung dari dalam kode Python)

untuk mengatasi Masalah yang ditunjukkan Andrew Dalke, cukup ketik string literal ke dalam file teks dan kemudian gunakan ini;

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

print input_string

Ini akan mencetak teks literal dari apa pun yang ada di file teks, meskipun itu;

 '   ''' """   \

Tidak menyenangkan atau optimal, tetapi dapat berguna, terutama jika Anda memiliki 3 halaman kode yang memerlukan pelolosan karakter.

Jeff Hykin
sumber
-1

jika string adalah variabel, gunakan. metode repr di atasnya:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'
markling
sumber
Bukankah itu dianggap gaya yang buruk?
shah.shah
apa, ketimun?
markling
1
Anda dapat menggunakan repr(s)sebagai gantinya untuk gaya yang lebih baik
xuiqzy