Trong python 3 điều hơi khác một chút, nhưng cách đơn giản hơn và ít bị lỗi hơn. Bạn nên nói với CSV rằng tệp của bạn nên được mở bằng utf8
mã hóa, vì nó làm cho dữ liệu đó dễ mang theo hơn cho người khác (giả sử bạn không sử dụng mã hóa hạn chế hơn, như latin1
)
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
fc = csv.DictWriter(output_file,
fieldnames=toCSV[0].keys(),
)
fc.writeheader()
fc.writerows(toCSV)
- Lưu ý rằng
csv
trong python 3 cần newline=''
tham số, nếu không, bạn sẽ nhận được các dòng trống trong CSV của mình khi mở trong excel / opencalc.
Ngoài ra: Tôi thích sử dụng trình xử lý csv trong pandas
mô-đun. Tôi thấy nó có khả năng chịu đựng các vấn đề mã hóa hơn và gấu trúc sẽ tự động chuyển đổi số chuỗi trong CSV thành đúng loại (int, float, v.v.) khi tải tệp.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
Ghi chú:
- gấu trúc sẽ đảm nhiệm việc mở tệp cho bạn nếu bạn cung cấp cho nó một đường dẫn và sẽ mặc định là
utf8
trong python3 và cũng tìm ra các tiêu đề.
- một khung dữ liệu không phải là cấu trúc giống như những gì CSV cung cấp cho bạn, vì vậy bạn thêm một dòng khi tải để có được điều tương tự:
dataframe.to_dict('records')
- gấu trúc cũng giúp việc kiểm soát thứ tự các cột trong tệp csv của bạn dễ dàng hơn nhiều. Theo mặc định, chúng là bảng chữ cái, nhưng bạn có thể chỉ định thứ tự cột. Với
csv
mô-đun vanilla , bạn cần cung cấp cho nó một OrderedDict
hoặc chúng sẽ xuất hiện theo thứ tự ngẫu nhiên (nếu hoạt động trong python <3.5). Xem: Bảo quản thứ tự cột trong Python Pandas DataFrame để biết thêm.