Trước hết, CSV là gì?
CSV (Giá trị được phân tách bằng dấu phẩy) là một định dạng tệp đơn giản được sử dụng để lưu trữ dữ liệu dạng bảng, chẳng hạn như bảng tính hoặc cơ sở dữ liệu. Tệp CSV lưu trữ dữ liệu dạng bảng (số và văn bản) ở dạng văn bản thuần túy. Mỗi dòng của tệp là một bản ghi dữ liệu. Mỗi bản ghi bao gồm một hoặc nhiều trường, được phân tách bằng dấu phẩy. Việc sử dụng dấu phẩy làm dấu phân tách trường là nguồn gốc của tên cho định dạng tệp này.
Đối với các tệp CSV hoạt động trong python, có một mô-đun có sẵn được gọi là csv . Đọc tệp CSV
# importing csv module
import
csv
# csv file name
filename
=
"aapl.csv"
# initializing the titles and rows list
fields
=
[]
rows
=
[]
# reading csv file
with
open
(filename,
'r'
) as csvfile:
# creating a csv reader object
csvreader
=
csv.reader(csvfile)
# extracting field names through first row
fields
=
next
(csvreader)
# extracting each data row one by one
for
row
in
csvreader:
rows.append(row)
# get total number of rows
print
(
"Total no. of rows: %d"
%
(csvreader.line_num))
# printing the field names
print
(
'Field names are:'
+
', '
.join(field
for
field
in
fields))
# printing first 5 rows
print
(
'\nFirst 5 rows are:\n'
)
for
row
in
rows[:
5
]:
# parsing each column of a row
for
col
in
row:
print
(
"%10s"
%
col),
print
(
'\n'
)
Kết quả của chương trình trên trông giống như sau:

Hãy để chúng tôi cố gắng hiểu đoạn mã này.
- với mở (tên tệp, ‘r’) dưới dạng csvfile: csvreader = csv.reader (csvfile) Ở đây, trước tiên chúng ta mở tệp CSV ở chế độ ĐỌC. Đối tượng tệp được đặt tên là csvfile . Đối tượng tệp được chuyển đổi thành đối tượng csv.reader. Chúng tôi lưu đối tượng csv.reader dưới dạng csvreader .
- fields = csvreader.next () csvreader là một đối tượng có thể lặp lại. Do đó, phương thức .next () trả về hàng hiện tại và chuyển trình vòng lặp đến hàng tiếp theo. Vì hàng đầu tiên của tệp csv của chúng tôi chứa tiêu đề (hoặc tên trường), chúng tôi lưu chúng trong một danh sách được gọi là trường .
- cho hàng trong csvreader: row.append (hàng) Bây giờ, chúng ta lặp qua các hàng còn lại bằng vòng lặp for. Mỗi hàng được nối vào một danh sách được gọi là hàng . Nếu bạn cố gắng in từng hàng, người ta có thể thấy hàng đó không là gì ngoài một danh sách chứa tất cả các giá trị trường.
- print (“Tổng số hàng:% d”% (csvreader.line_num)) csvreader.line_num không là gì ngoài một bộ đếm trả về số hàng đã được lặp lại.
Ghi vào tệp CSV
# importing the csv module
import
csv
# field names
fields
=
[
'Name'
,
'Branch'
,
'Year'
,
'CGPA'
]
# data rows of csv file
rows
=
[ [
'Nikhil'
,
'COE'
,
'2'
,
'9.0'
],
[
'Sanchit'
,
'COE'
,
'2'
,
'9.1'
],
[
'Aditya'
,
'IT'
,
'2'
,
'9.3'
],
[
'Sagar'
,
'SE'
,
'1'
,
'9.5'
],
[
'Prateek'
,
'MCE'
,
'3'
,
'7.8'
],
[
'Sahil'
,
'EP'
,
'2'
,
'9.1'
]]
# name of csv file
filename
=
"university_records.csv"
# writing to csv file
with
open
(filename,
'w'
) as csvfile:
# creating a csv writer object
csvwriter
=
csv.writer(csvfile)
# writing the fields
csvwriter.writerow(fields)
# writing the data rows
csvwriter.writerows(rows)
Hãy để chúng tôi cố gắng hiểu đoạn mã trên.
- trường và hàng đã được xác định. các trường là một danh sách chứa tất cả các tên trường. hàng là một danh sách các danh sách. Mỗi hàng là một danh sách chứa các giá trị trường của hàng đó.
- với mở (tên tệp, ‘w’) dưới dạng csvfile: csvwriter = csv.writer (csvfile) Ở đây, trước tiên chúng ta mở tệp CSV ở chế độ WRITE. Đối tượng tệp được đặt tên là csvfile . Đối tượng tệp được chuyển đổi thành đối tượng csv.writer. Chúng tôi lưu đối tượng csv.writer dưới dạng csvwriter .
- csvwriter.writerow (các trường) Bây giờ chúng ta sử dụng phương thức writerow để viết hàng đầu tiên không có gì khác ngoài các tên trường.
- csvwriter.writerows (hàng) Chúng tôi sử dụng phương thức writerows để viết nhiều hàng cùng một lúc.
Ghi từ điển vào tệp CSV
# importing the csv module
import
csv
# my data rows as dictionary objects
mydict
=
[{
'branch'
:
'COE'
,
'cgpa'
:
'9.0'
,
'name'
:
'Nikhil'
,
'year'
:
'2'
},
{
'branch'
:
'COE'
,
'cgpa'
:
'9.1'
,
'name'
:
'Sanchit'
,
'year'
:
'2'
},
{
'branch'
:
'IT'
,
'cgpa'
:
'9.3'
,
'name'
:
'Aditya'
,
'year'
:
'2'
},
{
'branch'
:
'SE'
,
'cgpa'
:
'9.5'
,
'name'
:
'Sagar'
,
'year'
:
'1'
},
{
'branch'
:
'MCE'
,
'cgpa'
:
'7.8'
,
'name'
:
'Prateek'
,
'year'
:
'3'
},
{
'branch'
:
'EP'
,
'cgpa'
:
'9.1'
,
'name'
:
'Sahil'
,
'year'
:
'2'
}]
# field names
fields
=
[
'name'
,
'branch'
,
'year'
,
'cgpa'
]
# name of csv file
filename
=
"university_records.csv"
# writing to csv file
with
open
(filename,
'w'
) as csvfile:
# creating a csv dict writer object
writer
=
csv.DictWriter(csvfile, fieldnames
=
fields)
# writing headers (field names)
writer.writeheader()
# writing data rows
writer.writerows(mydict)
Trong ví dụ này, chúng tôi viết một mydict từ điển vào một tệp CSV.
- với mở (tên tệp, ‘w’) dưới dạng csvfile:
nhà văn = csv.DictWriter (csvfile, fieldnames = các trường) Ở đây, đối tượng tệp ( csvfile ) được chuyển đổi thành đối tượng DictWriter.
Ở đây, chúng tôi chỉ định các tên trường như một đối số. - nhà văn.writeheader () Phương thức writeheader chỉ cần ghi hàng đầu tiên của tệp csv của bạn bằng cách sử dụng các tên trường được chỉ định trước.
- writer.writerows (mydict) Phương thức writerows chỉ viết tất cả các hàng nhưng trong mỗi hàng, nó chỉ ghi các giá trị (không phải khóa).
Vì vậy, cuối cùng, tệp CSV của chúng tôi trông giống như sau:

Điểm quan trọng:
- Trong mô-đun csv, một tham số phương ngữ tùy chọn có thể được sử dụng để xác định một tập hợp các tham số cụ thể cho một định dạng CSV cụ thể . Theo mặc định, mô-đun csv sử dụng phương ngữ excel giúp chúng tương thích với bảng tính excel. Bạn có thể xác định phương ngữ của riêng mình bằng cách sử dụng phương thức register_dialect . Đây là một ví dụ:
csv.register_dialect(
'mydialect',
delimiter = ',',
quotechar = '"',
doublequote = True,
skipinitialspace = True,
lineterminator = '\r\n',
quoting = csv.QUOTE_MINIMAL)
Bây giờ, trong khi xác định đối tượng csv.reader hoặc csv.writer, chúng ta có thể chỉ định phương ngữ như
sau:
csvreader = csv.reader(csvfile, dialect='mydialect')