Đọc ghi file CSV trong Python
CSV là từ viết tắt Comma Separated Values, có nghĩa là giá trị được phân tách bởi dấu phẩy. CSV được dùng để lưu trữ dữ liệu dạng table như spreadsheet hay database. Python hỗ trợ các hàm có sẵn để thao tác với file csv, chúng ta cùng tìm hiểu nhé.
Về cách mở, đóng file, các chế độ thao tác với file bạn có thể tìm hiểu ở bài trước: đọc ghi file text.
Nội dung của bài
Đọc file CSV
Ta có file test.csv với nộ dung:
name,age,job,city
Bob,20,Developer,Hà Nội
Leo,30,Developer,HCM
Để đọc file chúng ta cần import module csv và sử dụng hàm reader()
import csv
with open('test.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# Prints:
# ['name', 'age', 'job', 'city']
# ['Bob', '20', 'Developer', 'Hà Nội']
# ['Leo', '30', 'Developer', 'HCM']
Hàm reader() sẽ đọc file csv, đưa mỗi hàng thành một phân tử của 1 list.
Ghi file
Để ghi vào file csv đã tồm tại chúng ta cần mở file với chế độ: ‘w’, ‘a’ hoặc ‘r+’.
with open('test.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['Bob', '20', 'Developer', 'Hà Nội'])
writer.writerow(['Leo', '30', 'Developer', 'HCM'])
Đọc file CSV và đưa vào Dictionary
Chúng ta có thể đọc file csv và trả ra kết quả là một dictionary với điều kiện dòng đầu tiên của file sẽ là tên các cột.
import csv
with open('test.csv') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
# Prints:
# {'job': 'Manager', 'city': 'Hà Nội', 'age': '20', 'name': 'Bob'}
# {'job': 'Developer', 'city': 'HCM', 'age': '30', 'name': 'Leo'}
Nếu dòng đầu tiên của file CSV không có tên cột thì chúng ta cần cấu hình thêm tham số fieldnames
import csv
with open('test.csv') as f:
keys = ['name', 'age', 'job', 'city']
reader = csv.DictReader(f, fieldnames=keys)
for row in reader:
print(row)
# Prints:
# {'job': 'Manager', 'city': 'Hà Nội', 'age': '20', 'name': 'Bob'}
# {'job': 'Developer', 'city': 'HCM', 'age': '30', 'name': 'Leo'}
Ghi file CSV từ dictionary
Để ghi dictionary vào CSV file chúng ta có thể sử dụng hàm DictWriter() và phải truyền giá trị cho tham số fieldnames.
mport csv
with open('myfile.csv', mode='w') as f:
keys = ['name', 'age', 'job', 'city']
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader() # thêm tên cột vào file.
writer.writerow({'job': 'Developer', 'city': 'Hà Nội', 'age': '20', 'name': 'Bob'})
writer.writerow({'job': 'Developer', 'city': 'HCM', 'age': '30', 'name': 'Leo'})
Sử dụng dấu phân cách khác
Dấu phẩy (,) là mặc định trong file csv, tuy nhiên chúng ta có thể sử dụng dấu phân cách khác như |
, tab \t
, dấu hai chấm :
hoặc dấu chấm phẩy ;
# Sử dụng dấu phân cách '|'
import csv
with open('test.csv', mode='w') as f:
writer = csv.writer(f, delimiter='|')
writer.writerow(['Bob', '20', 'Developer', 'Hà Nội'])
writer.writerow(['Sam', '30', 'Developer', 'HCM'])
Thử đọc file này nhé
import csv
with open('myfile.csv') as f:
reader = csv.reader(f, delimiter='|')
for row in reader:
print(row)
# prints
# ['Bob', '20', 'Developer', 'Hà Nội']
# ['Leo', '30', 'Developer', 'HCM']
Xử lý dấu phẩy trong nội dung
Có nhiều trường hợp chúng ta cân lưu giá trị như địa chỉ nhà: Cầu giấy, Hà Nội. Thông thường khi ghi vào file CSV thì sẽ hiểu đây là 2 cột khác nhau. Để giải quyết vấn đề này chúng ta sử dụng tham số: quotechar.
import csv
with open('test.csv', mode='w') as f:
writer = csv.writer(f, quotechar='"')
writer.writerow(['Bob', '20', 'Cầu Giấy, Hà Nội'])
writer.writerow(['Leo', '30', 'Ba Đình, Hà Nội'])
File test.csv có nôi dụng:
Bob,25,"Cầu Giấy, Hà Nội"
Leo,30,"Ba Đình, Hà Nội"
Thử đọc file này nhé:
import csv
with open('myfile.csv') as f:
reader = csv.reader(f, quotechar='"')
for row in reader:
print(row)
# Prints:
# ['Bob', '20', 'Cầu Giấy, Hà Nội']
# ['Sam', '30', 'Ba Đình, Hà Nội']
Kết luận
Python đã hỗ trợ các hàm built-in để thao tác với file CSV, hôm nay chúng ta cũng đã tìm hiểu kỹ về cách đọc, ghi với file CSV. Các bạn hãy thực hành nhiều hơn để sử dụng thuần thục những kiến thức trong bài nhé.