Saya memiliki file CSV dengan sekitar 2000 catatan.
Setiap catatan memiliki string, dan kategori untuk itu:
This is the first line,Line1
This is the second line,Line2
This is the third line,Line3
Saya perlu membaca file ini menjadi daftar yang terlihat seperti ini:
data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]
Bagaimana cara mengimpor CSV ini ke daftar yang saya perlukan menggunakan Python?
csv
modul: docs.python.org/2/library/csv.htmlJawaban:
Menggunakan modul csv :
Keluaran:
Jika Anda membutuhkan tupel:
Keluaran:
Old Python 2 menjawab, juga menggunakan
csv
modul:sumber
b
menyebabkan file dibuka dalam mode biner sebagai lawan dari mode teks. Pada beberapa sistem, mode teks berarti yang\n
akan dikonversi ke baris baru khusus platform saat membaca atau menulis. Lihat dokumen .Diperbarui untuk Python 3 :
Keluaran:
sumber
'r'
adalah mode default, jadi tidak perlu menentukan. Dokumen juga menyebutkan Jika csvfile adalah objek file, itu harus dibuka dengan newline = ''.Panda cukup bagus dalam menangani data. Berikut ini satu contoh cara menggunakannya:
Satu keuntungan besar adalah bahwa panda berurusan secara otomatis dengan baris tajuk.
Jika Anda belum pernah mendengar tentang Seaborn , saya sarankan untuk melihatnya.
Lihat juga: Bagaimana cara saya membaca dan menulis file CSV dengan Python?
Panda # 2
Isi df adalah:
Isi dari dikt adalah
Panda # 3
Isi dari
lists
adalah:sumber
tuples = [tuple(x) for x in df.values]
dapat ditulistuples = list(df.itertuples(index=False))
sebagai gantinya. Perhatikan bahwa dokumen Pandas tidak mendukung penggunaan.values
mendukung.to_numpy()
. Contoh ketiga membingungkan bagi saya. Pertama, karena variabel tersebut dinamaituples
, yang akan menyiratkan bahwa itu adalah daftar tupel, padahal sebenarnya itu adalah daftar daftar. Kedua, karena sejauh yang saya tahu bahwa seluruh ekspresi dapat digantidf.to_list()
. Saya juga tidak tahu apakah contoh kedua benar-benar relevan di sini.Pembaruan untuk Python3:
Keluaran:
Jika csvfile adalah objek file, itu harus dibuka bersama
newline=''
.modul csv
sumber
list(map())
lebih dari pemahaman daftar? Juga, perhatikan spasi putih di awal setiap elemen kolom kedua.Jika Anda yakin tidak ada koma di masukan Anda, selain untuk memisahkan kategori, Anda dapat membaca file baris demi baris dan membagi pada
,
, kemudian dorong hasil untukList
Yang mengatakan, sepertinya Anda sedang melihat file CSV, jadi Anda dapat mempertimbangkan menggunakan modul untuk itu
sumber
sumber
.read().splitlines()
, Anda dapat beralih ke setiap baris file secara langsung:for line in in_file: res.append(tuple(line.rstrip().split(",")))
Juga, perlu diketahui bahwa menggunakan.split(',')
berarti bahwa setiap elemen dari kolom kedua akan mulai dengan spasi tambahan.line.rstrip()
->line.rstrip('\n')
.Seperti yang sudah dikatakan di komentar Anda dapat menggunakan
csv
perpustakaan dengan python. csv berarti nilai yang dipisahkan koma, yang tampaknya persis dengan kasus Anda: label dan nilai yang dipisahkan oleh koma.Menjadi kategori dan tipe nilai saya lebih suka menggunakan tipe kamus daripada daftar tupel.
Pokoknya dalam kode di bawah ini saya menunjukkan kedua cara:
d
adalah kamus danl
daftar tupel.sumber
(row[0], row[1])
lebih lemah / lebih rentan kesalahan daripada hanya menggunakantuple(row)
?Sebuah loop sederhana sudah cukup:
sumber
Sayangnya saya menemukan tidak ada jawaban yang ada yang sangat memuaskan.
Berikut ini adalah solusi Python 3 yang mudah dan lengkap, menggunakan modul csv .
Perhatikan
skipinitialspace=True
argumennya. Ini diperlukan karena, sayangnya, CSV OP berisi spasi putih setelah setiap koma.Keluaran:
sumber
Memperluas persyaratan Anda sedikit dan dengan anggapan Anda tidak peduli dengan urutan garis dan ingin membuat mereka dikelompokkan dalam kategori, solusi berikut dapat bekerja untuk Anda:
Dengan cara ini Anda mendapatkan semua baris relevan yang tersedia di kamus di bawah kunci menjadi kategori.
sumber
Berikut ini cara termudah dalam Python 3.x untuk mengimpor CSV ke array multidimensi, dan hanya 4 baris kode tanpa mengimpor apa pun!
sumber
Berikutnya adalah sepotong kode yang menggunakan modul csv tetapi mengekstrak konten file.csv ke daftar dicts menggunakan baris pertama yang merupakan header dari tabel csv
sumber
csv.DictReader
?