Bài viết trình bày cách đọc và ghi file CSV trong Python. Ví dụ dùng module csv và pandas.
Đọc CSV file dùng CSV Module
Đọc file orders.csv và lặp qua dữ liệu:
import csv
f = open("orders.csv", "rt")
orders = csv.reader(f)
for order in orders:
print(order)
f.close()
Kết quả orders.csv:
['OrderID', 'CustomerID', 'OrderDate']
['10248', '4', '10/02/2020']
['10249', '2', '10/02/2020']
['10250', '7', '10/02/2020']
Đọc CSV file dưới dạng Dictionary
Dùng DictReader: mỗi row là dict, column header là key.
import csv
orders = csv.DictReader(open("orders.csv"))
for order in orders:
print(order)
Kết quả:
{'OrderID': '10248', 'CustomerID': '4', 'OrderDate': '10/02/2020'}
{'OrderID': '10249', 'CustomerID': '2', 'OrderDate': '10/02/2020'}
{'OrderID': '10250', 'CustomerID': '7', 'OrderDate': '10/02/2020'}
Đọc CSV file dùng Pandas
Cài Pandas: pip3 install pandas.
import pandas
orders = pandas.read_csv('orders.csv')
print(orders)
Kết quả (bảng đẹp):
OrderID CustomerID OrderDate
0 10248 4 10/02/2020
1 10249 2 10/02/2020
2 10250 7 10/02/2020
Ghi CSV dùng Pandas
from pandas import DataFrame
import pandas as pd
order = pd.DataFrame({
'OrderID': ['10251', '10252', '10253'],
'CustomerID': ['5', '1', '8'],
'OrderDate': ['11/02/2020', '11/02/2020', '11/02/2020']
})
order.to_csv('newOrders.csv', index=False)
Kết quả newOrders.csv:
OrderID,CustomerID,OrderDate
10251,5,11/02/2020
10252,1,11/02/2020
10253,8,11/02/2020
Append dữ liệu vào CSV có sẵn (Pandas)
Mặc định mode 'w'. Để append, dùng mode='a' và header=False.
from pandas import DataFrame
import pandas as pd
order = pd.DataFrame({
'OrderID': ['10254'],
'CustomerID': ['3'],
'OrderDate': ['11/02/2020']
})
order.to_csv('newOrders.csv', mode='a', index=False, header=False)
Kết quả: dòng mới được thêm vào cuối file.
Ghi CSV dùng CSV Module
Lưu ý: Dòng đầu dùng làm header.
import csv
with open('orders.csv', 'w', newline='') as file:
order = csv.writer(file)
order.writerow(['OrderID', 'CustomerID', 'OrderDate'])
order.writerow(['10251', '6', '11/02/2020'])
order.writerow(['10252', '9', '11/02/2020'])
order.writerow(['10253', '5', '11/02/2020'])
Kết quả orders.csv:
OrderID,CustomerID,OrderDate
10251,6,11/02/2020
10252,9,11/02/2020
10253,5,11/02/2020
Để append với csv module: mode 'a' và bỏ qua header.
with open('orders.csv', 'a', newline='') as file:
order = csv.writer(file)
order.writerow(['10251', '6', '11/02/2020'])
Ghi CSV file với DictWriter
Dùng DictWriter của class csv.
import csv
with open('orders.csv', 'w', newline='') as file:
fieldnames = ['OrderID', 'CustomerID', 'OrderDate']
order = csv.DictWriter(file, fieldnames=fieldnames)
order.writeheader()
order.writerow({'OrderID': '10251', 'CustomerID': 7, 'OrderDate': '11/02/2020'})
order.writerow({'OrderID': '10252', 'CustomerID': 3, 'OrderDate': '11/02/2020'})
order.writerow({'OrderID': '10253', 'CustomerID': 1, 'OrderDate': '11/02/2020'})
Kết quả orders.csv:
OrderID,CustomerID,OrderDate
10251,7,11/02/2020
10252,3,11/02/2020
10253,1,11/02/2020