Pertanyaan Modul Python CSV - kutipan hilang


Saya memiliki file CSV yang memiliki data seperti ini

15,"I",2,41301888,"BYRNESS RAW","","BYRNESS VILLAGE","NORTHUMBERLAND","ENG"
11,"I",3,41350101,2,2935,2,2008-01-09,1,8,0,2003-02-01,,2009-12-22,2003-02-11,377016.00,601912.00,377105.00,602354.00,10

Saya membaca ini dan kemudian menulis baris yang berbeda ke file CSV yang berbeda.

Namun, dalam data asli ada tanda kutip di sekitar bidang non-numerik, karena beberapa di antaranya mengandung koma dalam bidang tersebut.

Saya tidak dapat menyimpan tanda kutip.

Saya telah meneliti banyak dan menemukan quoting=csv.QUOTE_NONNUMERIC Namun ini sekarang menghasilkan tanda kutip di setiap bidang dan saya tidak tahu mengapa ??

Jika saya mencoba salah satu opsi kutipan lainnya seperti MINIMAL, saya mendapatkan pesan kesalahan berkenaan dengan nilai tanggal, 2008-01-09, bukan menjadi pelampung.

Saya telah mencoba membuat dialek, menambahkan kutipan pada pembaca csv dan penulis tetapi tidak ada hasil yang saya coba dalam mendapatkan kecocokan tepat dengan data asli.

Ada yang punya masalah yang sama dan menemukan solusinya.


5
2018-02-19 22:13


asal


Jawaban:


Saat menulis, quoting=csv.QUOTE_NONNUMERIC membuat nilai tanpa tanda kutip selama mereka angka, yaitu. jika tipe mereka int atau float (misalnya), yang berarti ia akan menulis apa yang Anda harapkan.

Masalah Anda bisa jadi itu, saat membaca, a csv.reader akan mengubah setiap baris yang dibacanya menjadi list dari string (jika Anda membaca dokumentasi cukup hati-hati, Anda akan melihat pembaca tidak tidak melakukan konversi tipe data otomatis!

Jika Anda tidak melakukan konversi apa pun setelah membaca, maka ketika Anda menulis, Anda akan berakhir dengan semua yang ada di tanda kutip ... karena semua yang Anda tulis adalah string.

Edit: tentu saja, bidang tanggal akan dikutip, karena mereka tidak angka, yang berarti Anda tidak bisa mendapatkan perilaku yang diharapkan dengan tepat menggunakan standar csv.writer.


7
2018-02-19 23:24



Apakah Anda yakin Anda memiliki masalah? Perilaku yang Anda gambarkan benar: The csv modul akan menyertakan string dalam tanda kutip hanya jika itu perlu untuk menguraikannya dengan benar. Jadi, Anda harus mengharapkan untuk melihat kutipan hanya di sekitar string yang berisi koma, baris baru, dll. Kecuali Anda mendapatkan kesalahan saat membaca kembali output Anda, tidak ada masalah.


1
2018-02-20 17:40



Mencoba mendapatkan "pencocokan tepat" dari data asli adalah usaha yang sulit dan berpotensi tidak membuahkan hasil. quoting=csv.QUOTE_NONNUMERIC menaruh kutipan di sekitar semuanya karena setiap bidang adalah string saat Anda membacanya.

Kekhawatiran Anda bahwa beberapa bidang masukan "dikutip" dapat memiliki koma biasanya bukan masalah besar. Jika Anda menambahkan koma ke salah satu bidang yang Anda kutip dan menggunakan penulis default, bidang dengan koma akan dikutip secara otomatis dalam output.


0
2018-02-19 23:37