Tôi đang cố gắng phân tích cú pháp tệp CSV bằng mô-đun csv
của Python (cụ thể là lớp DictReader
). Có cách nào của Pythonic để phát hiện các trường trống hoặc thiếu và ném một lỗi không?Làm cách nào để phát hiện các trường bị thiếu trong tệp CSV theo cách Pythonic?
Đây là một tập tin mẫu sử dụng các tiêu đề sau: TÊN, NHÃN, GIÁ TRỊ
foo,bar,baz
yes,no
x,y,z
Khi phân tích cú pháp, tôi muốn dòng thứ hai để ném ra một lỗi kể từ khi nó còn thiếu lĩnh vực VALUE.
Dưới đây là một đoạn mã trong đó cho thấy làm thế nào tôi đang tiếp cận này (bỏ qua các chuỗi mã hóa cứng ... họ chỉ xuất hiện cho ngắn gọn):
import csv
HEADERS = ["name", "label", "value" ]
fileH = open('configFile')
reader = csv.DictReader(fileH, HEADERS)
for row in reader:
if row["name"] is None or row["name"] == "":
# raise Error
if row["label"] is None or row["label"] == "":
# raise Error
...
fileH.close()
Có cách nào sạch của kiểm tra các trường trong tệp CSV w/out có một loạt các câu lệnh if
? Nếu tôi cần thêm nhiều trường hơn, tôi cũng sẽ cần nhiều điều kiện hơn, điều mà tôi muốn tránh nếu có thể.
Cách thức ngọt ngào của Pythonic! –
Phương pháp này là khá nhiều không tương thích với hành vi của csv.DictReader. Nó sẽ lặp qua tất cả các phím trong hàng, mặc dù một số khóa có thể bị DictReader loại bỏ vì chúng không được đề cập rõ ràng trong HEADERS. Xem thêm tại đây: http://docs.python.org/library/csv.html#csv.DictReader – Triptych
@Triptych: Có tối đa một khóa bổ sung như vậy (giá trị được chuyển làm khóa khôi phục cho hàm tạo). Tôi không thấy vấn đề với điều đó. – balpha