Chương trình của tôi cần đọc các tệp csv có thể có 1,2 hoặc 3 cột và cần phải sửa đổi hành vi của các cột đó cho phù hợp. Có cách nào đơn giản để kiểm tra số cột mà không "tiêu thụ" một hàng trước khi trình vòng lặp chạy không? Các mã sau đây là thanh lịch nhất mà tôi có thể quản lý, nhưng tôi muốn để chạy kiểm tra trước khi cho vòng lặp bắt đầu:Tìm số cột trong tệp csv
import csv
f = 'testfile.csv'
d = '\t'
reader = csv.reader(f,delimiter=d)
for row in reader:
if reader.line_num == 1: fields = len(row)
if len(row) != fields:
raise CSVError("Number of fields should be %s: %s" % (fields,str(row)))
if fields == 1:
pass
elif fields == 2:
pass
elif fields == 3:
pass
else:
raise CSVError("Too many columns in input file.")
Edit: tôi nên đã đưa thêm thông tin về dữ liệu của tôi. Nếu chỉ có một trường, nó phải có tên trong ký hiệu khoa học. Nếu có hai trường, trường đầu tiên phải chứa tên và mã thứ hai là mã liên kết. Nếu có ba trường, trường bổ sung chứa một cờ chỉ định liệu tên đó có hợp lệ hay không. Do đó nếu bất kỳ hàng nào có 1, 2 hoặc 3 cột, tất cả đều phải giống nhau.
tốt hơn sử dụng 'fields' thay vì 'rows' . –
@MarcodeWit cảm ơn, tất nhiên nó phải là 'trường'! Tôi cũng đồng ý với quan điểm của bạn rằng không phải tất cả các hàng nhất thiết phải có cùng số trường. Trong trường hợp này, tôi đã quyết định sẽ tăng một ngoại lệ nếu gặp phải một hàng như vậy. – rudivonstaden