Pertanyaan Cara terbaik untuk mengubah unicode di csv ke teks biasa?


Saya memiliki file csv besar yang berisi karakter unicode yang menyebabkan kesalahan dalam skrip Python yang saya coba jalankan. Proses saya untuk menghapusnya sejauh ini cukup membosankan. Saya menjalankan skrip saya dan begitu menyentuh karakter unicode, saya mendapatkan kesalahan:

'ascii' codec can't encode character u'\xef' in position 197: ordinal not in range(128)

Lalu aku Google u '\ xef' dan mencoba untuk mencari tahu apa karakter sebenarnya (Apakah ada yang tahu situs web dengan daftar definisi ini?). Saya menggunakan informasi itu untuk membuat kamus dan saya memiliki skrip Python kedua yang mengubah karakter unicode menjadi teks biasa:

unicode_dict = {"\xb0":"deg", "\xa0":" ", "\xbd":"1/2", "\xbc":"1/4", "\xb2":"^2", "\xbe":"3/4"}

for f in glob.glob(r"C:\Folder1\*.csv"):
    in_csv = f
    out_csv = f.replace(".csv", "_2.csv")

    write_f=open(out_csv, "wb")
    writer = csv.writer(write_f)

    with open(in_csv,'rb') as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            new_row = []
            for s in row:
                for k, v in unicode_dict.iteritems():
                    s = s.replace(k, v)
                new_row.append(s)
            writer.writerow(new_row)

    write_f.close()
    os.remove(in_csv)
    os.rename(out_csv, in_csv)

Kemudian saya harus menjalankan kode lagi, dapatkan kesalahan lain, dan cari karakter unicode berikutnya di Google. Harus ada cara yang lebih baik, bukan?


4
2018-04-30 19:04


asal


Jawaban:


Baca baca http://www.joelonsoftware.com/articles/Unicode.html . Hati-hati.

Kemudian, Anda akan mengerti bahwa Anda perlu tahu encoding mana file Anda dalam. Jika Anda sudah bisa mencari tahu apa \xbd berarti, mungkin bahwa beberapa tempat menyebutkan yang mengkodekannya.

Kemudian, gunakan io.open(in_csv, 'rb', encoding='yourencodinghere') bukannya vanila open panggilan.

Kemudian, ternyata modul csv tidak menangani Unicode, desah. Gunakan sesuatu dari jawaban SBillion (mis. http://www.joelonsoftware.com/articles/Unicode.html ) untuk mengatasinya.


3
2018-04-30 19:17



Anda harus melihat ini untuk cara menangani Unicode melalui utf-8 dalam file csv dengan pustaka python standar: https://docs.python.org/2/library/csv.html#csv-examples

Tetapi jika Anda lebih suka, Anda dapat menggunakan modul unicode-compliant eksternal ini: https://pypi.python.org/pypi/unicodecsv/0.9.0


1
2018-04-30 19:09