Đọc và viết dữ liệu với file CSV trong Python

[dropcap]N[/dropcap]hiều phần mềm bảng tính có thể mở được định dạng dữ liệu csv. Trong quá trình đưa kết quả ra màn hình, nhiều giá trị muốn được giữ lại và lưu trong file để tiện sử dụng về sau. Cách thuận tiện nhất mà nhiều người vẫn dùng là xuất dữ liệu ra dạng csv. Tại sao chọn không chọn những định dạng khác như txt, dat, xls, etc? Tìm hiểu thêm về công dụng của định dạng csv. Sử dụng Python từ phiên bản 2.4 trở đi có thể đọc và viết với file csv (comma separated values). Giống như hầu hết các ngôn ngữ lập trình khác, Python cho phép bạn thực hiện các thao tác với tập tin. Writing a CSV file với Python có thể thực hiện bằng việc sử dụng csv module và tạo một đối tượng write để sử dụng phương thức WriteRowReading a CSV file thực hiện tương tự bằng việc tạo ra một đối tượng reader và sử dụng phương thức print để đọc tập tin đó. Vì các thao tác với file cần hiểu những khái niệm nâng cao nên đòi hỏi người đọc có kiến thức lập trình với Python mới đọc được phần đọc và viết dữ liệu với file CSV.

Yêu cầu tối thiểu

Kiến thức lập trình Python từ phiên bản 2.4 trở đi. Bạn cũng cần có kiến thức về kĩ thuật lập trình cơ bản. Hiểu biết các thao tác cơ bản với file.

Viết dữ liệu lên file CSV

Bắt đầu với việc import vào chương trình CSV module:

import csv

Kế đến, định nghĩa một đối tượng “writer” (đặt tên là c), dùng để viết dữ liệu lên CSV file. Đối số của phương thức writer được nhận từ hàm open chỉ ra tên tập tin CSV và tùy chọn mở tập tin wb để chỉ ra: w = write và b=binary.

c = csv.writer(open("MYFILE.csv", "wb"))

Bây giờ dùng phương thức writerow để viết từng dòng dữ liệu. Phương thức writerow nhận một tham số: là một danh sách, và mỗi phần tử trong danh sách tương ứng với một cột trong file CSV. Ví dụ, chúng ta thử làm một cuốn sổ địa chỉ như sau:

c.writerow(["Name","Address","Telephone","Fax","E-mail","Others"])

Và bằng cách đó chúng ta sẽ lưu tất cả các dòng dữ liệu vào file theo cách này.

Đọc dữ liệu từ file CSV

Trước hết tạo một đối tượng reader (giả sử ta đặt tên cho đối tượng này là: cr)

cr = csv.reader(open("MYFILE.csv","rb"))

Nếu file CSV lưu dưới dạng text, cần thay đổi một chút về chế độ đọc file từ rb sang rt.

cr = csv.reader(open("MYFILE.csv","rt"))

Một điều cần lưu ý, nếu file CSV có dòng header (tiêu đề của các cột – hàng đầu tiên) thì nó cũng được bỏ qua (skip/ignore).

cr.next()

Và kế tiếp chúng ta lấy từng dòng dữ liệu (theo dạng danh sách các cột) theo mẫu như sau:

for row in cr:    
    print row

Dĩ nhiên chúng ta có thể trích chính xác những nội dung cần thiết của một dòng bằng cách dùng chỉ mục (index):

for row in reader:    
    print row[2], row[-2]

Cách tương tự

Để đọc một file csv, chúng ta có thể làm tương tự với câu lệnh with như sau:

import csv
data_need_updated = {}
datafile = "/path/to/yourdata.csv"
with open(datafile,"rt") as csvfile:
    cr = csv.reader(csvfile)
    next(cr)
    for row in cr:
        data_need_updated.setdefault(row[0],{})[row[4]] = row

Nói thêm trong đoạn code bên trên, câu lệnh trong vòng for cho phép chèn dữ liệu vào một cấu trúc dữ liệu kiểu dictionary cho phép nhiều values có cùng key.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.