2010-03-05 23 views
15

Tôi có tập tin csv với dữ liệu sauCách tốt nhất để chuyển đổi dữ liệu csv để dict

val1,val2,val3 
1,2,3 
22,23,33 

Vì vậy, làm thế nào tôi có thể chuyển đổi dữ liệu vào dict

dict1 = { 'val1': 1, 'val2': 2, 'val3': 3} 
dict2 = { 'val1': 22, 'val2': 23, 'val3': 33} 
fp = open('file.csv', 'r') 
reader = csv.reader(fp) 
for row in reader: 
    ???? 

Cảm ơn

Trả lời

14

Sử dụng csv.DictReader:

Tạo đối tượng hoạt động như trình đọc thông thường nhưng ma ps thông tin được đọc vào một dict có các khóa được cho bởi tên trường tùy chọn. Các tên trường là một số sequence có các phần tử được liên kết với các trường của dữ liệu đầu vào theo thứ tự. Những yếu tố này trở thành chìa khóa của từ điển kết quả. Nếu các thông số tên trường bị 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 . Nếu hàng được đọc có nhiều trường hơn trình tự tên trường, thì dữ liệu còn lại sẽ được thêm dưới dạng chuỗi được khóa bằng giá trị là mã khuyến mại. Nếu hàng được đọc có ít trường hơn trình tự tên trường, các phím còn lại sẽ lấy giá trị của tham số tùy chọn tùy chọn. Bất kỳ đối số tùy chọn hoặc từ khóa khác được chuyển tới cơ bản reader dụ ...

+0

tôi đã không bao giờ nhận thấy rằng trước khi ... –

26
import csv 

reader = csv.DictReader(open('myfile.csv')) 
for row in reader: 
    # profit ! 
0

Điều thú vị với việc sử dụng 'csv' như đã đề cập trong câu trả lời khác ở đây là nó có thể được sử dụng để đọc một tập tin (trường hợp sử dụng rõ ràng) nhưng cũng phân tích cú pháp chuỗi được định dạng csv thông thường.

Ví dụ để đọc một tập tin csv:

import csv 
with open('my_file.csv') as f: 
    for line in csv.DictReader(f, fieldnames=('val1', 'val2', 'val3')): 
     print(line) 

thông báo rằng bạn có thể vượt qua một cách rõ ràng các tiêu đề mà bạn muốn được các phím, làm cho nó rất dễ dàng để sử dụng các file csv mà không tiêu đề.

Một trường hợp sử dụng đang đọc chỉ là một chuỗi thường xuyên với 'csv'

Ví dụ:

import csv 
my_csv_string = 'val1, val2, val3' 
my_csv_dict = next(csv.DictReader(StringIO(s), fieldnames=('key1', 'key2', 'key3'))) 

Dù sao, 'csv.DictReader()' là những gì bạn cần ..

Các vấn đề liên quan