Định dạng CSV là định dạng nhập và xuất được sử dụng phổ biến nhất cho cơ sở dữ liệu và bảng tính. Hướng dẫn này sẽ giới thiệu về mô-đun csv trong Python. Bạn sẽ tìm hiểu về tất cả các chức năng và lớp mà nó cung cấp để bạn đọc và ghi dữ liệu vào tệp CSV. Tôi cũng đã bao gồm một số ví dụ hoạt động để chỉ cho bạn cách đọc và ghi dữ liệu vào tệp CSV thực tế bằng Python
Tệp CSV là gì?
Thuật ngữ CSV là viết tắt của Giá trị được phân tách bằng dấu phẩy. Tệp định dạng CSV cho phép dữ liệu được lưu trong cấu trúc dạng bảng với. phần mở rộng csv. Các tệp CSV đã được sử dụng rộng rãi trong các ứng dụng thương mại điện tử vì chúng được coi là rất dễ xử lý. Một số lĩnh vực mà chúng đã được sử dụng bao gồm
- nhập và xuất dữ liệu khách hàng
- nhập khẩu và xuất khẩu sản phẩm
- đơn hàng xuất khẩu
- xuất báo cáo phân tích thương mại điện tử
Chức năng đọc và viết
Mô-đun csv có sẵn một số chức năng và lớp để làm việc với các tệp CSV. Hãy bắt đầu bằng cách học cách sử dụng các hàm
import csv85 và
import csv86
import csv
87
Hàm này trả về một đối tượng trình đọc lặp lại trên tất cả các dòng trong tệp CSV đã cho. Hàm
import csv88 nhận các tham số sau
import csv
89. Tham số đầu tiên có thể là bất kỳ đối tượng nào hỗ trợ giao thức iterator và trả về một chuỗi mỗi khi phương thứcimport csv
90 của nó được gọiimport csv
91. Một tham số tùy chọn được sử dụng để xác định một tập hợp các tham số dành riêng cho một phương ngữ CSV cụ thể. Nó được đặt thành excel theo mặc định. Bạn có thể lấy tên của tất cả các phương ngữ đã đăng ký bằng cách gọi hàmimport csv
92import csv
93. Tham số thứ ba cho biết bạn có thể tùy ý chuyển nhiều đối số từ khóa. Chúng rất hữu ích để ghi đè các tham số định dạng riêng lẻ trong phương ngữ hiện tại
Đây là một ví dụ rất đơn giản cho thấy cách sử dụng hàm
import csv88
1
import csv
2
3
with open['people.csv', newline=''] as File:
4
reader = csv.reader[File]
5
for row in reader:
6
import csv0
Bạn có nhận thấy
import csv95 được chuyển đến
import csv96 trong khi mở ví dụ không. csv?
import csv
98
Hàm này trả về một đối tượng ghi có nhiều phương thức trợ giúp để giúp bạn ghi dữ liệu của mình vào tệp CSV. Hàm này tương tự như hàm
import csv88. Nó nhận các tham số sau
2
00. Đây có thể là bất kỳ đối tượng nào có phương thức2
01. Một lần nữa, bạn nên mở nó bằng tham sốimport csv
95 nếu nó là đối tượng tệpimport csv
91. Một tham số tùy chọn được sử dụng để xác định một tập hợp các tham số dành riêng cho một CSV cụ thể2
04. Điều này chỉ ra rằng bạn có thể chuyển một loạt các đối số từ khóa tùy chọn để ghi đè hành vi của phương ngữ hiện tại
Lớp học 2
05 và 2
06
Các lớp
205 và
206 từ mô-đun csv cũng hữu ích cho việc đọc và ghi vào tệp CSV. Mặc dù chúng tương tự như chức năng đọc và ghi, các lớp này sử dụng các đối tượng từ điển để đọc và ghi dữ liệu
2
05
Lớp
205 tạo một đối tượng ánh xạ thông tin trong mỗi hàng của tệp đã cho tới một từ điển có các khóa có thể được chỉ định bởi tham số tùy chọn
211. Nếu bạn bỏ qua tham số
211, các giá trị trong hàng đầu tiên sẽ được sử dụng làm khóa
Đây là một ví dụ rất cơ bản về việc đọc nội dung của một tệp có tên là people. csv sử dụng lớp
205
1
import csv
2
3
import csv5_______15_______
import csv7
50_______9
6
for row in reader:12_______2
23
Lý tưởng nhất là bạn sẽ có cùng số hàng trong tệp của mình bằng số trường bạn đã chuyển vào tham số
211. Điều gì xảy ra nếu đó không phải là trường hợp?
Thứ nhất, hàng mà bạn đang đọc có nhiều trường hơn hàng trong
211. Trong trường hợp này, dữ liệu còn lại sẽ được đặt trong một danh sách và sau đó được lưu trữ trong một tên trường có giá trị được xác định bởi tham số
216. Thứ hai, một hàng có ít trường hơn hàng trong
211. Trong trường hợp này, các giá trị còn thiếu sẽ được điền bằng cách sử dụng giá trị bạn đã chỉ định cho tham số
218
2
06
Lớp
206 tạo một đối tượng ánh xạ từ điển lên các hàng mà bạn muốn xuất hoặc ghi vào tệp của mình. Giống như
205, lớp này cũng chấp nhận
211 làm tham số thứ hai của nó. Thứ tự của các trường khác nhau bên trong
211 xác định thứ tự các giá trị trong các từ điển khác nhau sẽ được chuyển đến phương thức
224
Không giống như lớp
205, tham số
211 trong lớp
206 không phải là tùy chọn. Điều này có ý nghĩa bởi vì một số từ điển có thể có một bộ khóa khác và việc sử dụng tham số
211 sẽ xóa mọi sự mơ hồ xung quanh việc sử dụng các khóa đó
Từ điển mà bạn muốn ghi vào tệp CSV có thể thiếu khóa có trong
211. Trong những trường hợp như vậy, giá trị được xác định bởi tham số
218 tùy chọn. Nếu bất kỳ từ điển nào có khóa phụ không có trong
211, bạn có thể sử dụng khóa
232 để chỉ định việc cần làm. Hành vi mặc định là đưa ra một ngoại lệ
233
Phương ngữ và định dạng
Một phương ngữ là một lớp trợ giúp được sử dụng để xác định các tham số cho một trường hợp hoặc cụ thể. Các tham số phương ngữ và định dạng cần được khai báo khi gọi hàm hoặc phương thức đọc hoặc ghi
Có một số thuộc tính được hỗ trợ bởi một phương ngữ
2
36. Chuỗi một ký tự được sử dụng để phân tách các trường. Nó mặc định là2
372
38. Chuỗi một ký tự được sử dụng để trích dẫn các trường chứa các ký tự đặc biệt. Điều này bao gồm ký tự2
39 hoặc ký tự2
40. Nó mặc định là2
412
42. Kiểm soát cách các phiên bản của quotechar xuất hiện bên trong một trường sẽ được trích dẫn. Nó có thể là2
43 hoặc2
44. Hãy nhớ rằng bạn sẽ phải đặt giá trị của escapechar nếu doublequote được đặt thành2
442
46. Một chuỗi được người viết sử dụng để thoát khỏi dấu phân cách nếu trích dẫn được đặt thành2
472
48. Một chuỗi được sử dụng để kết thúc các dòng được tạo bởi2
35. Nó mặc định là2
502
51. Nếu được đặt thành2
43, mọi khoảng trắng ngay sau dấu phân cách sẽ bị bỏ qua2
53. Nếu được đặt thành2
43, nó sẽ tạo ra một ngoại lệ đối với đầu vào CSV không hợp lệ2
55. Kiểm soát thời điểm tạo dấu ngoặc kép khi đọc hoặc ghi vào CSV
Thuộc tính trích dẫn có thể có một trong bốn giá trị có thể. đó là
2
56. Điều này yêu cầu2
35 trích dẫn tất cả các trường2
58. Điều này yêu cầu2
35 chỉ trích dẫn những trường có chứa ký tự đặc biệt như dấu phân cách hoặc ký tự2
402
61. Điều này yêu cầu2
35 trích dẫn tất cả các trường không phải là số và chuyển đổi các trường số thành số thực2
63. Điều này yêu cầu2
35 không bao giờ trích dẫn bất kỳ trường nào
Đọc tệp CSV
Hãy xem cách đọc tệp CSV bằng hàm và các lớp mà chúng tôi đã thảo luận ở trên
Chúng tôi sẽ làm việc với tệp CSV có tên là dữ liệu trạng thái. csv chứa thông tin về các tiểu bang khác nhau ở Hoa Kỳ. Ở đây chúng tôi có tệp CSV chứa tên của các tiểu bang, thủ đô, thành phố lớn nhất và dân số của họ
Dưới đây là mã để đọc dữ liệu trong CSV của chúng tôi bằng cách sử dụng cả hàm
import csv87 và lớp
266
Đọc tệp CSV với import csv
87
1
import csv
2
27_______13_______
29
4
31
5
for row in reader:
6
import csv0
Trong đoạn mã trên, chúng tôi nhập mô-đun csv và sau đó mở tệp CSV của chúng tôi dưới dạng
268. Sau đó, chúng tôi xác định đối tượng người đọc và sử dụng hàm
import csv88 để trích xuất dữ liệu vào đối tượng. Sau đó, chúng tôi lặp lại đối tượng
234 và truy xuất từng hàng dữ liệu của chúng tôi
Chúng tôi hiển thị dữ liệu đã đọc bằng cách in nội dung của nó ra bàn điều khiển. Bạn có thể thấy rằng dữ liệu trong các hàng riêng lẻ đã được trả về dưới dạng danh sách
đầu ra
1
37_______12_______
39_______13_______
with open['people.csv', newline=''] as File:1
414_______3
514_______5
Đọc tệp CSV bằng DictReader
Như tôi đã đề cập ở trên, lớp
205 cho phép chúng ta đọc tệp CSV bằng cách ánh xạ dữ liệu vào từ điển thay vì trả về danh sách như trong trường hợp của hàm
import csv88. Đây là cách đọc tệp CSV bằng lớp
205
1
import csv
2
3
29
4
42
5
for row in reader:
6
import csv0
Như thường lệ, trước tiên chúng tôi nhập mô-đun csv. Sau đó chúng ta định nghĩa đối tượng reader và sử dụng lớp
205 để trích xuất dữ liệu vào đối tượng. Sau đó, chúng tôi lặp lại đối tượng
234 và truy xuất từng hàng dữ liệu của chúng tôi
Cuối cùng, chúng tôi xuất dữ liệu đã đọc vào bàn điều khiển. Bạn có thể thấy rằng dữ liệu trong các hàng riêng lẻ lần này được trả về dưới dạng từ điển
đầu ra
1
48
2
reader = csv.reader[File]0
3
reader = csv.reader[File]2
4
reader = csv.reader[File]4
Sử dụng lớp
205 sẽ tốt hơn vì nó xuất dữ liệu của chúng ta dưới dạng từ điển, có thể dễ dàng làm việc hơn trong một số tình huống nhất định
Chúng tôi đã không chuyển bất kỳ giá trị nào cho tham số
211 trong ví dụ trước, vì vậy,
205 đã sử dụng các trường ở hàng đầu tiên làm khóa từ điển. Lần này, hãy chuyển một danh sách làm giá trị cho tham số
211. Tôi đã cố ý loại bỏ Thành phố và Dân số lớn nhất khỏi danh sách
211 để cho bạn thấy cách
205 ứng xử trong trường hợp này. Tôi cũng chuyển một giá trị cho tham số
216 vì chúng tôi có nhiều mục trong mỗi hàng hơn các trường trong
211
1
import csv
2
3
reader = csv.reader[File]9
4
5
29
617_______4
22
for row in reader:
57
import csv0
Đoạn mã trên cho đầu ra sau
1
for row in reader:0_______12_______
for row in reader:2
3
for row in reader:4
418_______6
518_______8
Vì chúng tôi đã chuyển các khóa từ điển trong
211, hàng đầu tiên không còn được sử dụng để tạo khóa và được xuất dưới dạng từ điển. Cũng lưu ý rằng tất cả các giá trị bổ sung trong mỗi hàng hiện đang được lưu trữ trong danh sách và được gán cho khóa Dữ liệu bổ sung trong từ điển
Ghi vào tệp CSV
Bây giờ chúng ta hãy xem cách ghi dữ liệu vào tệp CSV bằng cách sử dụng hàm
285 và lớp
286 đã thảo luận ở phần đầu của hướng dẫn này
Ghi vào tệp CSV bằng cách sử dụng import csv
98
Đoạn mã dưới đây ghi dữ liệu được xác định vào tệp
288
1
import csv
2
3
63
4
5
66
6
68
22
import csv00
Trước tiên, chúng tôi nhập mô-đun csv và hàm
import csv86 sẽ tạo một đối tượng phù hợp để viết. Chúng tôi sử dụng phương pháp
224 vì có một hàng duy nhất có dữ liệu mà chúng tôi muốn ghi vào tệp
Đây là CSV của chúng tôi với dữ liệu chúng tôi đã ghi vào đó
Ghi vào tệp CSV bằng DictWriter
Hãy ghi dữ liệu sau vào tệp CSV của chúng tôi. Nó chứa thông tin về ba tiểu bang khác nhau của Hoa Kỳ trong một danh sách, với các phần tử riêng lẻ là một từ điển
1
import csv02
2
import csv04
3
import csv06
4
import csv08
5
import csv10
6
import csv12
22
import csv14
57
import csv16
import csv17
import csv18
import csv19
import csv20
import csv21
import csv22
import csv23
import csv14
import csv25
import csv26
import csv27
import csv28
import csv29
import csv30
import csv31
import csv32
import csv33
import csv34
import csv35
import csv36
Mã này như hình bên dưới
1
import csv
2
3
import csv41
4
5
66
6
import csv46
22
import csv48
Trước tiên, chúng tôi xác định tên trường dưới dạng danh sách và lưu trữ chúng trong biến
291. Điều này cho phép đối tượng
235 biết tiêu đề của từng cột trong tệp CSV. Phương thức
293 sẽ ghi tất cả các hàng mà chúng tôi cung cấp cho nó cùng một lúc vào tệp CSV. Điều kiện duy nhất cho
293 là các hàng mà chúng tôi muốn viết có thể lặp lại được
Bản thân mỗi hàng riêng lẻ cũng phải là một chuỗi hoặc số có thể lặp lại nếu chúng ta sử dụng hàm
import csv86 như chúng ta đã làm trong ví dụ trước. Mặt khác, mỗi hàng phải là một từ điển ánh xạ
211 thành chuỗi hoặc số để lớp
206 xử lý
Hãy thử ghi dữ liệu sau vào tệp CSV của chúng tôi ngay bây giờ
1
import csv02
2
import csv04
3
import csv54
4
import csv56
5
import csv14
6
import csv60
22
import csv62
57
import csv64
import csv17
import csv66
import csv19
import csv68
import csv21
import csv34
import csv23
import csv36
Có hai điều đáng chú ý về dữ liệu trên. Đầu tiên, tiểu bang Florida của chúng tôi đang thiếu một số thông tin. Thứ hai, bang Georgia có một số thông tin bổ sung dựa trên những gì chúng tôi đang lưu trữ trong bảng. Thứ ba, các khóa cho tiểu bang Georgia không theo thứ tự mà chúng tôi đã xác định các trường cho tệp CSV của mình
Làm thế nào chúng ta có thể xử lý dữ liệu không chuẩn như thế này? . Đối với các khóa bị thiếu, chúng tôi chỉ cần cung cấp giá trị mặc định bằng cách sử dụng tham số
218. Nó được đặt thành một chuỗi rỗng theo mặc định. Tuy nhiên, bạn cũng có thể chỉ định một giá trị tùy chỉnh chẳng hạn như Unknown. Đối với các phím phụ, bạn có thể sử dụng tham số
232 để yêu cầu
206 bỏ qua các phím đó. Tham số này sẽ tăng một
233 theo mặc định
Đây là cách ghi vào tất cả các hàng cùng một lúc
1
import csv
2
3
import csv77
4
5
66
6
import csv82
22
import csv48
Tệp CSV của chúng tôi sẽ trông như thế này sau tất cả các thao tác ghi
Phần kết luận
Hướng dẫn này đã trình bày hầu hết những gì cần thiết để có thể đọc và ghi thành công vào tệp CSV bằng cách sử dụng các hàm và lớp khác nhau do Python cung cấp. Các tệp CSV đã được sử dụng rộng rãi trong các ứng dụng phần mềm vì chúng dễ đọc và dễ quản lý cũng như kích thước nhỏ giúp chúng xử lý và truyền tương đối nhanh
Học Python
Tìm hiểu Python với hướng dẫn hướng dẫn Python hoàn chỉnh của chúng tôi, cho dù bạn mới bắt đầu hay bạn là một lập trình viên dày dặn đang tìm cách học các kỹ năng mới
Bài đăng này đã được cập nhật với sự đóng góp từ Monty Shokeen. Monty là một nhà phát triển full-stack, người cũng thích viết hướng dẫn và tìm hiểu về các thư viện JavaScript mới