Đối số id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0 là
Một 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, chẳng hạn như DELIMITER hoặc QUOTERCHAR hoặc có chứa các ký tự dòng mới. Nó mặc định là '"'.
Ví dụ,
Nếu tệp id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 của bạn chứa dữ liệu của biểu mẫu
|Hello|,|My|,|name|,|is|,|"John"| |Hello|,|My|,|name|,|is|,|"Tom"|Sau đó, trong trường hợp đó, bạn không thể sử dụng mặc định id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0 là id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 3 vì nó đã có trong các thực thể của dữ liệu CSV để hướng dẫn đầu đọc CSV mà bạn muốn id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 4 được đưa vào đầu ra, bạn sẽ chỉ định một số id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0, nó có thể là id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 6 hoặc id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 7 hoặc bất kỳ ký tự nào tùy thuộc vào các yêu cầu.
Đầu ra bây giờ bao gồm id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 8 và id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 9 trong dấu ngoặc kép,
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"']Hãy xem xét một ví dụ khác trong đó trường CSV chứa import csv with open('employees.csv', 'rt') as f: csv_reader = csv.reader(f) for line in csv_reader: print(line) 0, hãy xem xét tệp id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 chứa where csv field itself contains import csv with open('employees.csv', 'rt') as f: csv_reader = csv.reader(f) for line in csv_reader: print(line) 0, consider the id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 file contains
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100"Bây giờ trong trường hợp như vậy, bạn phải chỉ định id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0 một cách rõ ràng để hướng dẫn đầu đọc CSV để nó có thể phân biệt giữa dấu phân cách thực tế (ký tự điều khiển) và dấu phẩy (ký tự nghĩa đen) trong trường CSV. Bây giờ trong trường hợp này, id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0 id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 3 cũng sẽ hoạt động.
Bây giờ đến với mã của bạn, bạn phải thay thế không gian trắng thêm trước import csv with open('employees.csv', 'rt') as f: csv_reader = csv.reader(f) for line in csv_reader: print(line) 0 trong tệp id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 bằng chuỗi trống. Bạn có thể làm điều này theo cách sau:
Thử cái này:
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row)Điều này xuất hiện,
['Hello', 'My', 'name', 'is', 'John']- Nhà
- Python: Cách đọc và ghi các tệp CSV
. Tìm hiểu khoa học dữ liệu bằng cách hoàn thành các thách thức mã hóa tương tác và xem video của các giảng viên chuyên gia. Bắt đầu bây giờ!
Cập nhật vào ngày 07 tháng 1 năm 2020
Tệp CSV là gì? #
CSV (giá trị phân tách bằng dấu phẩy) là một định dạng trao đổi dữ liệu phổ biến được sử dụng bởi các ứng dụng để tạo và tiêu thụ dữ liệu. Một số định dạng trao đổi dữ liệu nổi tiếng khác là XML, HTML, JSON, v.v.
Tệp CSV là một tệp văn bản đơn giản trong đó mỗi dòng chứa một danh sách các giá trị (hoặc trường) được phân định bởi dấu phẩy.
Mặc dù thuật ngữ "dấu phẩy" xuất hiện trong chính tên định dạng, nhưng bạn sẽ gặp các tệp CSV trong đó dữ liệu được phân định bằng tab (import csv with open('employees.csv', 'rt') as f: csv_reader = csv.reader(f) for line in csv_reader: print(line) 7) hoặc đường ống (id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 6) hoặc bất kỳ ký tự nào khác có thể được sử dụng làm dấu phân cách.
Dòng đầu tiên của tệp CSV đại diện cho tiêu đề chứa danh sách các tên cột trong tệp. Tiêu đề là tùy chọn nhưng rất khuyến khích.
Tệp CSV thường được sử dụng để biểu diễn dữ liệu bảng. Ví dụ, hãy xem xét bảng sau:
1 | Kabul | AFG | Kabol | 1780000 |
2 | Qandahar | AFG | Qandahar | 237500 |
3 | Herat | AFG | Herat | 186800 |
4 | Mazar-e-Sharif | AFG | Kabol | 127800 |
5 | Qandahar | Herat | Mazar-e-Sharif | 731200 |
Balkh
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" |
Amsterdam
Dân số | 10 | Kabul |
AFG | 20 | Kabol |
Qandahar | 30 | Herat |
Mazar-e-Sharif
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" |
Balkh
1 | Bảng trên có thể được biểu diễn bằng định dạng CSV như sau: | Nếu các giá trị trong tệp CSV của bạn chứa dấu phẩy, thì nó phải được đặt bên trong các trích dẫn kép. Ví dụ: |
2 | AFG | Kabol |
Qandahar
Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" |
Herat
Mazar-e-Sharif
Balkh
Amsterdam
- ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 01
- ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 02
- ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 03
- ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 04
NLD
Noord-Hà Lan
Bảng trên có thể được biểu diễn bằng định dạng CSV như sau:
Nếu các giá trị trong tệp CSV của bạn chứa dấu phẩy, thì nó phải được đặt bên trong các trích dẫn kép. Ví dụ: reader(fileobj [, dialect='excel' [, **fmtparam] ]) -> _csv.reader
Jerry | 2776 McDowell Street, Nashville, Tennessee |
Tom | 3171 Jessie Street, Westerville, Ohio |
Mike | 1818 Phố Sherman, Hope, Kansas |
Để giữ lại dấu phẩy bên trong trường địa chỉ, kèm theo nó trong các dấu ngoặc kép, như sau:
employees.csv
id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales |
Tương tự, nếu bạn có dấu ngoặc kép được nhúng bên trong một trường, nó phải được thoát với một ký tự trích dẫn kép khác. Nếu không, họ sẽ không được giải thích chính xác. Ví dụ:
import csv with open('employees.csv', 'rt') as f: csv_reader = csv.reader(f) for line in csv_reader: print(line) |
ID
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 0 |
Người sử dụng
Bình luận
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 1 |
ID
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 2 |
Người sử dụng
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 3 |
ID
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 4 |
Người sử dụng
Bình luận
Sau đây là một số đối số bổ sung mà bạn có thể chuyển đến hàm ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 01 để tùy chỉnh hoạt động của nó.
- ________ 90 & nbsp;- Nó đề cập đến ký tự được sử dụng để tách các giá trị (hoặc trường) trong tệp CSV. Nó mặc định là dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18).
- ________ 119 & nbsp; - Nó kiểm soát cách không gian theo dấu phân cách sẽ được giải thích. Nếu đúng & nbsp ;, không gian trắng ban đầu sẽ bị loại bỏ. Nó mặc định là ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 20.
- ________ 121 & nbsp;- Nó đề cập đến trình tự ký tự được sử dụng để chấm dứt dòng. Nó mặc định là ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 22.
- ________ 80 & nbsp;- Nó đề cập đến chuỗi ký tự đơn sẽ được sử dụng để trích dẫn các giá trị nếu các ký tự đặc biệt (như Delimiter) xuất hiện bên trong trường. Nó mặc định là id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 3.
- ________ 125 & nbsp; - Kiểm soát khi trích dẫn nên được tạo bởi người đọc hoặc được người đọc công nhận. Nó có thể mất một trong những hằng số sau:
- ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 26 có nghĩa là chỉ thêm báo giá khi được yêu cầu, ví dụ, khi một trường chứa quotechar hoặc dấu phân cách. Đây là mặc định.
- ________ 127 & nbsp; có nghĩa là trích dẫn mọi thứ bất kể loại trường.
- ________ 128 & nbsp; có nghĩa là trích dẫn mọi thứ ngoại trừ số nguyên và phao.
- ________ 129 & nbsp; có nghĩa là không trích dẫn bất cứ điều gì trên đầu ra. Tuy nhiên, trong khi đọc trích dẫn được bao gồm xung quanh các giá trị trường.
- ________ 130 & nbsp;- Nó đề cập đến chuỗi một ký tự được sử dụng để thoát khỏi dấu phân cách khi trích dẫn được đặt thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 31. Nó mặc định là ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 32.
- ________ 133 & nbsp; - Kiểm soát việc xử lý các trích dẫn bên trong các trường. Khi ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, hai trích dẫn liên tiếp được hiểu là một trong khi đọc và khi viết, mỗi ký tự trích dẫn được nhúng trong dữ liệu được viết là hai trích dẫn. Hãy làm việc một số ví dụ để hiểu rõ hơn về cách các đối số này hoạt động:
Đối số phân định #
employees_pipe.csv
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 5 |
Tệp này sử dụng ký tự ống (id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 6) làm dấu phân cách. Dưới đây là cách đọc tệp CSV này:
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 6 |
Đầu ra dự kiến:
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 7 |
Bỏ qua
baseball_players.csv
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 8 |
Tệp CSV này chứa các khoảng trắng theo dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18). Để đọc chính xác tệp CSV này, đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 19 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, như sau:
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 9 |
Đầu ra dự kiến:
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 0 |
Bỏ qua
addresses.csv
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 1 |
Tệp CSV này chứa các khoảng trắng theo dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18). Để đọc chính xác tệp CSV này, đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 19 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, như sau:
quotechar & nbsp; đối số #
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 2 |
Đầu ra dự kiến:
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 3 |
Bỏ qua
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 4 |
Đầu ra dự kiến:
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 5 |
Bỏ qua
comments.csv
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 6 |
Tệp CSV này chứa các khoảng trắng theo dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18). Để đọc chính xác tệp CSV này, đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 19 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, như sau:
quotechar & nbsp; đối số #
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 7 |
Đầu ra dự kiến:
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 8 |
Bỏ qua
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 9 |
Đầu ra dự kiến:
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 0 |
Bỏ qua
dialogues.csv
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 1 |
Tệp CSV này chứa các khoảng trắng theo dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18). Để đọc chính xác tệp CSV này, đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 19 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, như sau:
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 2 |
Đầu ra dự kiến:
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 3 |
Bỏ qua
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 4 |
Đầu ra dự kiến:
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 5 |
Bỏ qua
Tệp CSV này chứa các khoảng trắng theo dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18). Để đọc chính xác tệp CSV này, đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 19 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, như sau:
quotechar & nbsp; đối số # ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 54
Lưu ý rằng địa chỉ được chia thành ba trường, điều này chắc chắn không chính xác. Để khắc phục sự cố, chỉ cần thay đổi ký tự trích dẫn thành một trích dẫn duy nhất (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 39) bằng cách sử dụng đối số id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0: | Escapechar & nbsp; đối số # |
Tệp này sử dụng ký tự Backslash (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 44) để thoát khỏi các trích dẫn kép được nhúng. Tuy nhiên, theo mặc định, mô -đun id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 mặc định sử dụng ký tự trích dẫn kép để thoát khỏi ký tự trích dẫn kép. | Nếu cố gắng đọc tệp này bằng các tùy chọn mặc định, bạn sẽ nhận được đầu ra như thế này: |
Đầu ra này chắc chắn không mong muốn. Để có được sự thay đổi đầu ra chính xác, ký tự thoát bằng đối số ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 30, như sau: | doublequote & nbsp; đối số # |
Tệp này sử dụng báo giá kép để thoát các ký tự trích dẫn kép được nhúng trong trường. Theo mặc định, ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 33 được đặt thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34. Kết quả là, trong khi đọc hai trích dẫn đôi liên tiếp được hiểu là một.
Lưu ý rằng địa chỉ được chia thành ba trường, điều này chắc chắn không chính xác. Để khắc phục sự cố, chỉ cần thay đổi ký tự trích dẫn thành một trích dẫn duy nhất (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 39) bằng cách sử dụng đối số id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0: | Escapechar & nbsp; đối số # |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 62 | Viết nhiều hàng dữ liệu và trả về ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 32. ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 64 phải là một chuỗi. |
Đây là những ví dụ:
Ví dụ 1: Sử dụng ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 65: Using ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 65
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 6 | from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 7 |
Ví dụ 2: Sử dụng ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 66: Using ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 66
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 8 | from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 9 |
Đầu ra được tạo ra bởi cả hai danh sách sẽ giống nhau và nó trông như thế này:
customers.csv
['Hello', 'My', 'name', 'is', 'John'] 0 |
Lưu ý rằng chỉ trường địa chỉ được bọc xung quanh báo giá kép. Điều này là do theo mặc định, đối số ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 được đặt thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 68. Nói cách khác, các trường sẽ chỉ được trích dẫn khi QuoteChar hoặc Delimiter xuất hiện trong dữ liệu.
Giả sử bạn muốn trích dẫn đôi xung quanh tất cả dữ liệu văn bản. Để đạt được điều này, đặt đối số ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 70.
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 8 | ['Hello', 'My', 'name', 'is', 'John'] 2 |
Đầu ra dự kiến:
customers.csv
['Hello', 'My', 'name', 'is', 'John'] 3 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 8 | ['Hello', 'My', 'name', 'is', 'John'] 5 |
Đầu ra dự kiến:
['Hello', 'My', 'name', 'is', 'John'] 6 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.
Mọi thứ đều được trích dẫn kép bây giờ.
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 8 | ['Hello', 'My', 'name', 'is', 'John'] 8 |
Đầu ra dự kiến:
['Hello', 'My', 'name', 'is', 'John'] 9 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 8 | "ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 1 |
Đầu ra dự kiến:
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 2 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.
Mọi thứ đều được trích dẫn kép bây giờ.
from io import StringIO with open("test.csv", newline="") as f: file = StringIO(f.read().replace(" ,", ",")) reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 8 | "ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 4 |
Đầu ra dự kiến:
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 5 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.
Mọi thứ đều được trích dẫn kép bây giờ.
Điều quan trọng cần lưu ý là khi trích dẫn là trên (tức là tham số ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 có giá trị khác với ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 29), mô -đun id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 sử dụng id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 0 (mặc định là id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 3) để trích dẫn trường.
Danh sách sau đây thay đổi ký tự trích dẫn từ báo giá kép (id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 3) thành một trích dẫn duy nhất (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 39).: ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 97
Vấn đề là trường địa chỉ chứa dấu phẩy nhúng (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18) và vì chúng tôi đã tắt khả năng trích dẫn các trường, mô -đun id,name,email,age,designation 1,John,,24,programmer 2,Bob,,34,designer 3,Mary,,43,sales 1 không biết cách thoát chúng đúng. | Đây là nơi mà cuộc tranh luận ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 30 phát huy tác dụng. Phải mất một chuỗi một ký tự sẽ được sử dụng để thoát khỏi dấu phân cách khi trích dẫn được tắt (tức là ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 88). |
Danh sách sau đây đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 30 thành dấu gạch chéo ngược (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 44). | Lưu ý rằng dấu phẩy (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18) trong trường địa chỉ được thoát ra bằng ký tự dấu gạch chéo ngược (['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 44). |
Bây giờ bạn sẽ có một sự hiểu biết tốt về các đối số định dạng khác nhau và bối cảnh mà chúng được sử dụng với hàm ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 01 và ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 02. Trong phần tiếp theo sẽ thấy một số cách khác để đọc và ghi dữ liệu. | Đọc tệp CSV với DicTreader # |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 95 hoạt động gần như chính xác như ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 01 nhưng thay vì trả lại một dòng làm danh sách, nó trả về một từ điển. Cú pháp của nó như sau: | Cú pháp :: ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 97 |
Tranh luận | Sự mô tả |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 09 | (Yêu cầu) Nó đề cập đến đối tượng tệp. |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99
(tùy chọn) Nó đề cập đến danh sách các khóa sẽ được sử dụng trong từ điển được trả lại theo thứ tự. Nếu bị bỏ qua, các tên trường được suy ra từ hàng đầu tiên của tệp CSV.:
customers.csv
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 6 |
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 7 |
Đầu ra dự kiến:
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 8 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.: Using ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99 parameter
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 9 |
Mọi thứ đều được trích dẫn kép bây giờ.
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 0 |
Đầu ra dự kiến:
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 1 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.: Using "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 00 parameter
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 9 |
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 3 |
Đầu ra dự kiến:
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 4 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.: Using "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 03
"ID","Name","CountryCode","District","Population" "1","Kabul","AFG","Kabol","1780000" "2","Qandahar","AFG","Qandahar","237500" "3","Herat","AFG","Herat","186800" "4","Mazar-e-Sharif","AFG","Balkh","127800" "5","Amsterdam","NLD","Noord-Holland","731200" 9 |
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 6 |
Đầu ra dự kiến:
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 7 |
Bây giờ tất cả các tên và địa chỉ có trích dẫn kép xung quanh chúng.
Nếu bạn muốn báo giá kép xung quanh tất cả các trường bất kể Quotechar hay Delimiter xuất hiện trong dữ liệu hay không, hãy đặt ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 25 thành ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 27.
Mọi thứ đều được trích dẫn kép bây giờ.
Cú pháp: "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 18 "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 18
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 09 | Nó đề cập đến đối tượng tệp |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99 | Nó đề cập đến tên trường và thứ tự chúng sẽ được viết tệp. |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 03 | Nó cung cấp giá trị còn thiếu cho các khóa không tồn tại trong từ điển. |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 | Nó kiểm soát hành động nào sẽ thực hiện nếu từ điển chứa một khóa, điều đó không được tìm thấy trong đối số ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99. Theo mặc định, "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 được đặt thành "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 25, điều đó có nghĩa là một ngoại lệ sẽ được nêu ra trong một sự kiện như vậy. Nếu bạn muốn bỏ qua các giá trị bổ sung được đặt "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 thành "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 27. |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 17 cung cấp ba phương thức sau để ghi dữ liệu.
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 09 | Nó đề cập đến đối tượng tệp |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99 | Nó đề cập đến tên trường và thứ tự chúng sẽ được viết tệp. |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 03 | Nó cung cấp giá trị còn thiếu cho các khóa không tồn tại trong từ điển. |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22
Nó kiểm soát hành động nào sẽ thực hiện nếu từ điển chứa một khóa, điều đó không được tìm thấy trong đối số ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99. Theo mặc định, "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 được đặt thành "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 25, điều đó có nghĩa là một ngoại lệ sẽ được nêu ra trong một sự kiện như vậy. Nếu bạn muốn bỏ qua các giá trị bổ sung được đặt "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 thành "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 27.:
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 8 | Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 9 |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 17 cung cấp ba phương thức sau để ghi dữ liệu.
dictcustomers.csv
['Hello', 'My', 'name', 'is', 'John'] 0 |
Phương pháp: Using "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 03
Name,Age,Address Jerry,10,"2776 McDowell Street, Nashville, Tennessee" Tom,20,"3171 Jessie Street, Westerville, Ohio" Mike,30,"1818 Sherman Street, Hope, Kansas" 8 | Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 2 |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 17 cung cấp ba phương thức sau để ghi dữ liệu.
dictcustomers.csv
Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 3 |
Phương pháp
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 29: Using "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22
Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 4 | Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 5 |
Viết tiêu đề (tức là ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99) vào tệp CSV và trả về ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 32.
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 17 cung cấp ba phương thức sau để ghi dữ liệu.
dictcustomers.csv
Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 6 |
Phương pháp
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 29
Viết tiêu đề (tức là ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 99) vào tệp CSV và trả về ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 32.
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 60
Viết một hàng dữ liệu duy nhất và trả về số lượng ký tự được viết. ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 61 phải là một chuỗi các chuỗi và số.
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 62
Hãy lấy một số ví dụ: | Ví dụ 1: | Đầu ra dự kiến: |
Ví dụ 2: Sử dụng "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 03 | Trong trường hợp này, giá trị của trường "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 15 bị thiếu trong các từ điển. Kết quả là S, giá trị của "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 03 sẽ được sử dụng cho trường "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 15. | Ví dụ 3: Sử dụng "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 |
Ở đây, từ điển chứa một khóa phụ có tên "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 42 không có trong danh sách "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 43. Để ngăn chặn ngoại lệ được nâng lên, chúng tôi đã đặt "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 22 thành "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 27. | Tạo phương ngữ # | Trước đó trong bài đăng này, chúng tôi đã học các tham số định dạng khác nhau cho phép chúng tôi tùy chỉnh đối tượng người đọc và người viết để phù hợp với sự khác biệt trong các quy ước CSV. |
Nếu bạn thấy mình vượt qua cùng một tập hợp các tham số định dạng nhiều lần. Xem xét việc tạo phương ngữ của riêng bạn. | Một đối tượng phương ngữ hoặc (chỉ đơn giản là phương ngữ) là một cách để nhóm các tham số định dạng khác nhau. Khi bạn đã tạo đối tượng phương ngữ, chỉ cần chuyển nó cho người đọc hoặc người viết, thay vì truyền riêng từng đối số định dạng. | Để tạo một phương ngữ mới, chúng tôi sử dụng hàm "Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 46. Nó chấp nhận tên phương ngữ dưới dạng chuỗi và một hoặc nhiều tham số định dạng làm đối số từ khóa. |
Bảng sau liệt kê tất cả các đối số định dạng cùng với các giá trị mặc định của chúng: | Mặc định | import csv with open('employees.csv', 'rt') as f: csv_reader = csv.reader(f) for line in csv_reader: print(line) 0 |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 18 | Nó đề cập đến ký tự được sử dụng để tách các giá trị (hoặc trường) trong tệp CSV. | ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 19 |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 20 | Nó kiểm soát cách không gian theo dấu phân cách sẽ được giải thích. Nếu ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 34, khoảng trắng ban đầu sẽ bị loại bỏ. | ['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 21 |
['Hello', 'My', 'name', 'is', '"John"'] ['Hello', 'My', 'name', 'is', '"Tom"'] 22
Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 7 | Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 8 |
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 17 cung cấp ba phương thức sau để ghi dữ liệu.
oscars.csv
Id,User,Comment 1,Bob,"John said ""Hello World""" 2,Tom,""The Magician"" 9 |
Phương pháp
"Fruit","Quantity","Cost" "Strawberry","1000","$2,200" "Apple","500","$1,100" 29