2015-12-15 26 views
5

Khá mới với python và tài liệu về tệp csv hơi khó hiểu.Đọc/Viết một từ điển vào tệp csv trong python

Tôi có một cuốn từ điển đó trông giống như sau:

key1: (value1, value2)

khóa2: (value1, value2)

key3: (value1, value2) .. ..

Tôi muốn viết những tệp này ra tệp csv theo định dạng trong đó mỗi dòng chứa khóa, theo sau là hai giá trị.

Tôi cũng muốn có thể đọc lại từ điển vào từ điển từ tệp sau này.

+1

Đọc https://docs.python.org/3/tutorial/ này, hãy tự mình giải quyết vấn đề này, đến đây (nếu bạn gặp khó khăn) để đặt câu hỏi cụ thể. –

+2

Tại sao lại là CSV? Nếu bạn muốn lưu và tải, bạn có thể nhìn vào những thứ như 'pickle' hoặc' json'. Cả hai đều có các phương thức load và dump khá vững chắc, 'json' outbut là người dùng có thể đọc được. –

+0

Tôi sẽ sử dụng các giá trị này trong excel để thực hiện một số tính toán. Nhưng sẽ được sử dụng trên nhiều tệp để tôi có thể giữ tổng số đang chạy. – SlightlyCultured

Trả lời

4

tôi không tìm đủ lý do để sử dụng Pandas đây để một vấn đề tương đối đơn giản. Cũng lưu ý đến OP, nếu bạn muốn lưu trữ các giá trị trong tập tin và đọc nó trở lại đi cho JSON thay vì CSV. Xuất sang CSV sẽ hữu ích khi tương tác với những người khác (người dùng Excel tiềm năng).

Dưới đây là làm thế nào tôi sẽ lưu giữ nó trong CSV

value1 = 'one' 
value2 = 'two' 
d = { 
     'key1': (value1, value2), 
     'key2': (value1, value2), 
     'key3': (value1, value2) 
    } 
CSV ="\n".join([k+','+",".join(v) for k,v in d.items()]) 
print CSV #You can store this string variable to file as you wish 
# with open("filename.csv", "w") as file: 
    # file.write(CSV) 

Mã này giải thích những gì xảy ra bên trong danh sách comrpehension.

CSV = "" 
for k,v in d.items(): 
    line = "{},{}\n".format(k, ",".join(v)) 
    CSV+=line 
print CSV 
+0

Điều này trông giống như một cái gì đó tôi có thể hiểu được. Vì vậy, nơi bạn đã viết "cho k, v trong d.items()", không tham số v (giả định nhãn cho giá trị) tự động nhận rằng có 2 giá trị (một bộ) ở đó? tức là khóa in, giá trị 1, giá trị 2 này? – SlightlyCultured

+0

Có, 'v' được giả định cho một tuple,' ",". Join' có nghĩa là tham gia các varialbes tuple đó bằng dấu phẩy. Tôi đã xây dựng danh sách hiểu với một for-loop. Hy vọng rằng sẽ dễ dàng hơn và dễ đọc hơn. – nehemiah

6

Tôi rất khuyên bạn nên Pandas cho việc này.

Convert to Pandas DataFrame:

import pandas as pd 

d = { 
    'a': (1, 101), 
    'b': (2, 202), 
    'c': (3, 303) 
} 
df = pd.DataFrame.from_dict(d, orient="index") 

Tạo một file CSV:

df.to_csv("data.csv") 

Đọc tập tin CSV lại như một DataFrame:

df = pd.read_csv("data.csv", index_col=0) 

Chuyển đổi DataFrame trở lại định dạng từ điển gốc:

d = df.to_dict("split") 
d = dict(zip(d["index"], d["data"])) 

EDIT: Cảm ơn Đại tá Beauvel đã nhắc tôi rằng bạn có thể chuyển tên tệp trực tiếp đến các chức năng của Pandas.

EDIT2: Vì bạn đề cập rằng mục tiêu của bạn để sử dụng tệp đầu ra trong Excel, Pandas to_excel()read_excel() có thể hữu ích hơn cho bạn vì chúng bảo toàn tốt hơn nội dung giữa các chuyển đổi. Ngoài ra, bạn có thể muốn bỏ qua Excel hoàn toàn và sử dụng standard Python scientific stack.

+2

cách tốt nhất bằng cách sử dụng gấu trúc là to_csv, không cần cho lệnh mở, cf câu trả lời của tôi. –

+0

Không muốn nghe có vẻ cầu kỳ, nhưng có ai biết làm thế nào để làm điều đó chỉ bằng cách sử dụng python trần truồng? Không thực sự muốn sử dụng các gói khác như một người mới bắt đầu của python. – SlightlyCultured

+0

Nếu bạn đang tìm kiếm một cái gì đó tối thiểu hơn về phụ thuộc, thì câu trả lời của itsneo có lẽ là những gì bạn đang hướng tới. –

3

Tôi sẽ sử dụng gấu trúc, nó có thể được thực hiện trong một dòng:

import pandas as pd 

dic = {'key1':['v1','v2'], 'key2':['vv','gg']} 

pd.DataFrame(dic).T.reset_index().to_csv('myfile.csv', header=False, index=False) 
Các vấn đề liên quan