Ini pasti akan mudah, tapi itu benar-benar menggangguku.
Saya memiliki skrip yang berbunyi di halaman web dan menggunakan Beautiful Soup untuk menguraikannya. Dari sup, saya mengekstrak semua tautan karena tujuan akhir saya adalah mencetak tautan.
Semua teks yang saya uraikan adalah ASCII. Saya tahu bahwa Python memperlakukan string sebagai unicode, dan saya yakin ini sangat berguna, tidak ada gunanya dalam skrip wee saya.
Setiap kali saya pergi untuk mencetak variabel yang memegang 'String' saya [u'String']
dicetak ke layar. Apakah ada cara sederhana untuk mengembalikan ini ke ascii atau haruskah saya menulis regex untuk menghapusnya?
Jawaban:
[u'ABC']
akan menjadi daftar satu elemen dari string unicode. Beautiful Soup selalu menghasilkan Unicode . Jadi, Anda perlu mengonversi daftar ke string unicode tunggal, dan kemudian mengonversi itu menjadi ASCII.Saya tidak tahu persis bagaimana Anda mendapatkan daftar satu elemen; anggota konten akan menjadi daftar string dan tag, yang tampaknya bukan milik Anda. Dengan asumsi bahwa Anda benar-benar selalu mendapatkan daftar dengan elemen tunggal, dan bahwa tes Anda benar-benar hanya ASCII Anda akan menggunakan ini:
Namun, harap periksa kembali apakah data Anda benar-benar ASCII. Ini sangat jarang. Jauh lebih mungkin itu latin-1 atau utf-8.
Atau Anda bertanya kepada Beautiful Soup apa penyandian aslinya dan mendapatkannya kembali dalam penyandian ini:
sumber
print(', '.join([u'ABC' , u'...']))
Anda mungkin memiliki daftar yang berisi satu string unicode. Ini
repr
adalah[u'String']
.Anda dapat mengonversikan ini ke daftar string byte menggunakan variasi berikut ini:
sumber
repr(x).lstrip('u')[1:-1]
. Gunakan sesuatu seperti:print ", ".join(my_list)
sebagai gantinya, untuk memformat daftar string Unicode.akan dicetak
sumber
Jika mengakses / mencetak daftar elemen tunggal (misalnya, berurutan atau difilter):
sumber
my_list = [str(my_list[x]) for x in range(len(my_list))]
meneruskan fungsi output ke str () dan itu akan menghapus konversi keluaran unicode. juga dengan mencetak output, itu akan menghapus tag u 'dari itu.
sumber
[u'String']
adalah representasi teks dari daftar yang berisi string Unicode pada Python 2.Jika Anda menjalankan
print(some_list)
maka itu setara denganprint'[%s]' % ', '.join(map(repr, some_list))
yaitu, untuk membuat representasi teks dari objek Python dengan tipelist
,repr()
fungsi dipanggil untuk setiap item.Jangan bingung objek Python dan representasi teksnya -
repr('a') != 'a'
dan bahkan representasi teks representasi teks berbeda:repr(repr('a')) != repr('a')
.repr(obj)
mengembalikan string yang berisi representasi objek yang dapat dicetak. Tujuannya adalah untuk menjadi representasi yang jelas dari suatu objek yang dapat berguna untuk debugging, dalam REPL. Seringeval(repr(obj)) == obj
.Untuk menghindari panggilan
repr()
, Anda dapat mencetak item daftar secara langsung (jika semuanya adalah string Unicode) misalnya:print ",".join(some_list)
—itu mencetak daftar string yang dipisahkan koma:String
Jangan meng-encode string Unicode ke byte menggunakan pengkodean karakter hardcoded, cetak Unicode langsung sebagai gantinya. Jika tidak, kode mungkin gagal karena pengkodean tidak dapat mewakili semua karakter misalnya, jika Anda mencoba menggunakan
'ascii'
pengkodean dengan karakter non-ascii. Atau kode secara diam-diam menghasilkan mojibake (data yang rusak diteruskan lebih jauh dalam pipa) jika lingkungan menggunakan pengkodean yang tidak sesuai dengan pengkodean hardcoded.sumber
Gunakan
dir
atautype
pada 'string' untuk mencari tahu apa itu. Saya menduga itu salah satu objek tag BeautifulSoup, yang dicetak seperti string, tetapi sebenarnya bukan satu. Jika tidak, ini ada di dalam daftar dan Anda perlu mengonversi setiap string secara terpisah.Bagaimanapun, mengapa Anda keberatan menggunakan Unicode? Ada alasan khusus?
sumber
Apakah Anda benar-benar jahat?
u'String'
?Bagaimanapun, tidak bisakah Anda hanya melakukan
str(string)
untuk mendapatkan string daripada unicode-string? (Ini harus berbeda untuk Python 3, yang semua string unicode.)sumber
encode("latin-1")
membantu saya dalam kasus saya:sumber
Mungkin saya tidak mengerti, mengapa Anda tidak mendapatkan element.text lalu mengonversinya sebelum menggunakannya? misalnya (tidak tahu mengapa Anda melakukan ini tetapi ...) cari semua elemen label halaman web dan beralih di antara mereka sampai Anda menemukan satu yang disebut MyText
Konversikan string dari saya dan lakukan apa pun yang ingin Anda lakukan ... mungkin saya kehilangan sesuatu di pesan aslinya? atau ini yang kamu cari?
sumber