Tôi muốn csv.DictReader
để suy ra tên trường từ tệp. The docs nói "Nếu tham số tên trường được bỏ qua, các giá trị trong hàng đầu tiên của csvfile sẽ được sử dụng làm tên trường.", nhưng trong trường hợp của tôi hàng đầu tiên containts một tiêu đề và hàng thứ 2 có chứa tên.Làm cách nào để bỏ qua dòng tiêu đề trước bằng csv.DictReader?
Tôi không thể áp dụng next(reader)
theo Python 3.2 skip a line in csv.DictReader vì gán tên trường diễn ra khi khởi tạo trình đọc (hoặc tôi đang làm sai).
Các csvfile (xuất khẩu từ Excel 2010, original source):
CanVec v1.1.0,,,,,,,,,^M
Entity,Attributes combination,"Specification Code
Point","Specification Code
Line","Specification Code
Area",Generic Code,Theme,"GML - Entity name
Shape - File name
Point","GML - Entity name
Shape - File name
Line","GML - Entity name
Shape - File name
Area"^M
Amusement park,Amusement park,,,2260012,2260009,LX,,,LX_2260009_2^M
Auto wrecker,Auto wrecker,,,2360012,2360009,IC,,,IC_2360009_2^M
Mã của tôi:
f = open(entities_table,'rb')
try:
dialect = csv.Sniffer().sniff(f.read(1024))
f.seek(0)
reader = csv.DictReader(f, dialect=dialect)
print 'I think the field names are:\n%s\n' % (reader.fieldnames)
i = 0
for row in reader:
if i < 20:
print row
i = i + 1
finally:
f.close()
kết quả hiện tại:
I think the field names are:
['CanVec v1.1.0', '', '', '', '', '', '', '', '', '']
kết quả mong muốn:
I think the field names are:
['Entity','Attributes combination','"Specification Code Point"',...snip]
Tôi nhận ra rằng sẽ thuận tiện khi chỉ xóa hàng đầu tiên và tiếp tục, nhưng tôi đang cố gắng gần với việc đọc dữ liệu tại chỗ nhất có thể và giảm thiểu sự can thiệp thủ công.
Đây là giải pháp linh hoạt hơn, miễn là người ta biết chắc chắn một tên trường (kỳ vọng hợp lý). Cảm ơn. –