Saya mencoba membuat file .csv dengan nilai dari daftar Python. Ketika saya mencetak nilai-nilai dalam daftar mereka semua unicode (?), Yaitu mereka terlihat seperti ini
[u'value 1', u'value 2', ...]
Jika saya beralih melalui nilai-nilai dalam daftar yaitu for v in mylist: print v
mereka tampaknya menjadi teks biasa.
Dan saya bisa menempatkan ,
antara masing-masing denganprint ','.join(mylist)
Dan saya dapat menampilkan ke file, yaitu
myfile = open(...)
print >>myfile, ','.join(mylist)
Tapi saya ingin output ke CSV dan memiliki pembatas di sekitar nilai-nilai dalam daftar misalnya
"value 1", "value 2", ...
Saya tidak dapat menemukan cara mudah untuk memasukkan pembatas dalam format, misalnya saya telah mencoba melalui join
pernyataan. Bagaimana saya bisa melakukan ini?
Jawaban:
Sunting: ini hanya berfungsi dengan python 2.x.
Untuk membuatnya bekerja dengan python 3.x ganti
wb
denganw
( lihat jawaban SO ini )sumber
csv
modul dalam 2.x tidak dapat menangani unicodes dengan benar; lihat dokumentasi modul untuk contoh tentang cara menangani hal ini. docs.python.org/library/csv.htmlTypeError: 'str' does not support the buffer interface
.'w'
seperti di sini: stackoverflow.com/questions/34283178/…Berikut ini adalah versi aman dari Alex Martelli:
sumber
with
, pastikan file ditutup ketika selesaiwr.writerow(my_list)
di dalam loop?Untuk pendekatan lain, Anda dapat menggunakan DataFrame di panda : Dan itu dapat dengan mudah membuang data ke csv seperti kode di bawah ini:
sumber
Opsi terbaik yang saya temukan menggunakan
savetxt
darinumpy
modul :Jika Anda memiliki banyak daftar yang perlu ditumpuk
sumber
Gunakan
csv
modul python untuk membaca dan menulis file koma atau dibatasi-tab. Modul csv lebih disukai karena memberi Anda kontrol yang baik atas penawaran.Misalnya, berikut ini contoh yang berhasil untuk Anda:
Menghasilkan:
sumber
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL))
mengisi data, tidak peduli apakah Anda meletakkanopen("myfile.csv","w")
atau file baruopen("myfile2.csv","w")
. Sepertinya objek keluar tidak dapat berurusan dengan objek file yang dibangun saat dijalankan, tetapi menyimpan proses output sebagai todo. Dengan kata lain: objek keluar menyimpan objek file dalam menjalankan pertama tetapi hanya menulis ketika objek file sudah ada! Lihat solusi tepat di bawah @Saurabh AdhikaryAnda bisa menggunakan metode string.join dalam kasus ini.
Pisahkan beberapa baris untuk kejelasan - inilah sesi interaktif
Atau sebagai satu baris
Namun, Anda mungkin memiliki masalah adalah string Anda telah mendapatkan penawaran harga. Jika demikian, Anda harus memutuskan bagaimana cara menghindarinya.
The modul CSV bisa mengurus semua ini untuk Anda, memungkinkan Anda untuk memilih antara berbagai pilihan mengutip (semua bidang, hanya ladang dengan kutipan dan seperators, hanya bidang non numerik, dll) dan bagaimana charecters kontrol esacpe (tanda kutip ganda, atau string yang lolos). Jika nilai-nilai Anda sederhana, string.join mungkin akan baik-baik saja tetapi jika Anda harus mengelola banyak kasus tepi, gunakan modul yang tersedia.
sumber
Solusi ini kedengarannya gila, tetapi berfungsi selembut madu
File sedang ditulis oleh csvwriter maka sifat csv dipertahankan yaitu dipisahkan oleh koma. Pembatas membantu di bagian utama dengan memindahkan item daftar ke baris berikutnya, setiap kali.
sumber
data = [["value %d" % i, "value %d" % (i+1)] for i in range(1,4)] with open("myfile.txt","w") as f: out = csv.writer(f, quoting=csv.QUOTE_ALL, delimiter='\n') out.writerow([';'.join(x) for x in data])
Untuk membuat dan menulis ke file csv
Contoh di bawah ini menunjukkan pembuatan dan penulisan file csv. untuk membuat penulis file dinamis, kita perlu mengimpor paket impor csv , kemudian perlu membuat instance file dengan referensi file Mis: - dengan terbuka ("D: \ sample.csv", "w", newline = "" ) sebagai file_writer
di sini jika file tidak ada dengan direktori file yang disebutkan maka python akan membuat file yang sama di direktori yang ditentukan, dan "w" mewakili write, jika Anda ingin membaca file kemudian ganti "w" dengan "r" atau untuk menambahkan ke file yang ada lalu "a". newline = "" menentukan bahwa ia menghapus baris kosong tambahan untuk setiap kali Anda membuat baris sehingga untuk menghilangkan baris kosong kami menggunakan newline = "", buat beberapa nama bidang (nama kolom) menggunakan daftar seperti bidang = = "" Nama "," Usia "," Class "] , kemudian berlaku untuk instance penulis seperti writer = csv.DictWriter (file_writer, fieldnames = fields) di sini menggunakan Kamus penulis dan menetapkan nama kolom, untuk menulis nama kolom ke csv kami menggunakan penulis. , saat menulis nilai file harus diteruskan menggunakan metode kamus, di sini kuncinya adalah nama kolom dan nilai adalah nilai kunci Anda masing-masing
sumber
Notebook Jupyter
Katakanlah daftar Anda
A
Kemudian Anda dapat membuat kode iklan berikut yang akan Anda miliki sebagai file csv (kolom saja!)
sumber
Anda harus menggunakan modul CSV untuk memastikan, tetapi kemungkinan besar, Anda harus menulis unicode. Bagi mereka yang perlu menulis unicode, ini adalah kelas dari halaman contoh, yang dapat Anda gunakan sebagai modul util:
sumber
Berikut ini solusi lain yang tidak memerlukan
csv
modul.Contoh:
Namun, jika daftar awal berisi beberapa ", mereka tidak akan lolos. Jika diperlukan, dimungkinkan untuk memanggil fungsi untuk menghindarinya seperti itu:
sumber