Cách đọc và phân tích tệp CSV bằng Python

Tìm hiểu cách đọc và phân tích cú pháp tệp CSV bằng Python bằng mô-đun csv tích hợp. Đọc thành thạo dưới dạng danh sách, trình đọc từ điển và dấu phân cách tùy chỉnh.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

CSV (Giá trị được phân tách bằng dấu phẩy) là định dạng tệp phổ biến để lưu trữ tập dữ liệu dạng bảng. Cho dù nhập cơ sở dữ liệu, xuất bảng tính hay tải xuống nhật ký, đọc CSV là một kỹ năng cốt lõi. Python bao gồm một mô-đun `csv` tích hợp chuyên dụng, được tối ưu hóa cao để phân tích các tệp CSV một cách dễ dàng mà không cần thư viện của bên thứ ba như gấu trúc.

Hàm `csv.reader` đọc từng dòng tệp và phân tích cú pháp tệp đó, phân tách từng hàng bằng dấu phân cách bằng dấu phẩy và trả về danh sách các chuỗi. Nếu tệp CSV của bạn có hàng tiêu đề (ví dụ: nhãn cột), thì việc sử dụng `csv.DictReader` thường được ưu tiên hơn. Nó tự động phân tích từng hàng thành một từ điển trong đó các khóa là nhãn cột, giúp mã dễ đọc hơn và mạnh mẽ hơn trước những thay đổi trong thứ tự cột.

Khi mở tệp CSV, cách tốt nhất là đặt `newline=""` trong câu lệnh `open()`. Điều này ngăn Python thực hiện các bản dịch dòng mới tự động, điều này có thể dẫn đến lỗi phân tích cú pháp trên một số hệ điều hành nhất định. Ngoài ra, hãy luôn chỉ định `encoding="utf-8"` để xử lý các ký tự đặc biệt.

Đầu ra mã & thực thi

Tập lệnh này minh họa việc viết một tệp CSV mẫu và đọc nó bằng cả csv.reader và csv.DictReader.

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
Đầu ra thiết bị đầu cuối
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

Triển khai từng bước

  • Nhập mô-đun csv tích hợp trong tập lệnh của bạn.
  • Mở tệp CSV bằng cách sử dụng open("employees.csv", "r", newline="", Encoding="utf-8") làm tệp.
  • Chuyển đối tượng tệp tới csv.reader(file) để phân tích các hàng của tệp dưới dạng danh sách các chuỗi.
  • Sử dụng csv.DictReader(file) để phân tích các hàng dưới dạng ánh xạ từ điển tương ứng với tiêu đề cột.

Câu hỏi thường gặp

Tại sao tôi nên đặt dòng mới="" khi mở tệp CSV?

Việc đặt dòng mới="" ngăn Python sửa đổi các ký tự cuối dòng một cách linh hoạt, đảm bảo mô-đun csv có thể phân tích chính xác các dòng mới kiểu csv trên các hệ điều hành khác nhau.

Làm cách nào để phân tích cú pháp tệp CSV sử dụng tab hoặc dấu chấm phẩy thay vì dấu phẩy?

Bạn có thể chuyển một dấu phân cách tùy chỉnh cho hàm đọc: csv.reader(file, delimiter="\t") hoặc csv.reader(file, delimiter=";").

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.