2015-12-15 29 views
5

Çok yeni python ve csv dosyaları için belgeler biraz kafa karıştırıcı.Python'da csv dosyasına bir sözlük okuma/yazma

aşağıdaki gibi görünen bir sözlük var:

key1: (değer1; değer2)

anahtar2: (değer1; değer2)

anahtar3: (değer1; değer2) .. ..

Bunları, her satırın anahtar içerdiği ve ardından iki değeri içeren bir csv dosyasına yazmak istiyorum.

Ayrıca, daha sonraki bir tarihte dosyadan bir sözlük içine geri okuyabilmek isterim.

+1

Bu https://docs.python.org/3/tutorial/ adresini okuyun, bunu kendi başınıza çözmeye çalışın, belirli soruları sormak için (sorun varsa) buraya gelin. –

+2

Neden bir CSV? Eğer kaydetmek ve yüklemek istiyorsanız 'pickle' veya json' gibi şeylere bakabilirsiniz. Her ikisinin de oldukça katı dökümü ve yükleme yöntemleri vardır, 'json' kullanıcı tarafından okunabilir. –

+0

Bazı değerleri hesaplamak için bu değerleri excel'de kullanacağım. Ancak birden fazla dosyada kullanacağım, böylece çalışan bir toplamı koruyabileceğim. – SlightlyCultured

cevap

4

. Ayrıca, OP'ye not edin, eğer değeri dosyada saklamak ve tekrar okumak isterseniz, CSV yerine JSON'a gidin. CSV'ye dışa aktarma, diğer insanlarla etkileşime girmeye yardımcı olacaktır (potansiyel olarak Excel kullanıcıları). İşte

Ben Bu kod listesi comrpehension içeride neler olduğunu açıklar

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) 

CSV

depolar açarsınız.

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

Bu, anlayabileceğim bir şeye benziyor. "K, v d.items()" için yazdığınız yerde, v parametresi (değer için etiket varsayılıyor) otomatik olarak orada 2 değer (bir tuple) var mı? Bu yazdırma anahtarı, değer1, değer2 olacak mı? – SlightlyCultured

+0

Evet, 'v' bir tuple için kabul edilir,' ', '' join' bir virgül ile bu tuple varialbes katılmak demektir. Liste kavramalarını for-loop ile detaylandırdım. Umarım daha kolay ve okunabilir olur. – nehemiah

6

Bunun için Pandas'u öneririm.

Pandalar DataFrame Dönüştür:

df.to_csv("data.csv") 

CSV oku DataFrame olarak geri dosyası:

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

geri DataFrame dönüştürme

import pandas as pd 

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

CSV dosyası oluşturun Orijinal sözlük biçimi:

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

DÜZENLEME: Albay Beauvel'e dosya adını doğrudan Panda işlevlerine iletebileceğinizi hatırlattığınız için teşekkürler.

EDIT2: Excel'de çıktı dosyasını kullanma amacınızdan bahsetmiş olduğunuzdan, Pandalar to_excel() ve read_excel(), dönüşümler arasındaki içeriği daha iyi koruduğundan, sizin için daha kullanışlı olabilir. Ayrıca, Excel'i tamamen atlamak ve standard Python scientific stack'u kullanmak isteyebilirsiniz. Ben panda kullanacağı

+2

vardır to_csv, hayır Açık komuta ihtiyacım var cevabım. –

+0

Seçici görünmek istemiyorum, ancak çıplak python kullanarak nasıl yapılacağını bilen var mı? Python'un yeni başlayanı olarak başka paketler kullanmak istemiyorum. – SlightlyCultured

+0

Bağımlılık açısından en az bir şey arıyorsanız, o zaman onun cevabı muhtemelen neyi hedefliyorsunuzdur. –

3

, bu bir çizgide yapılabilir: Ben nispeten basit bir sorun için buraya pandalar kullanmak için yeterli nedenler bulmuyorum

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) 
İlgili konular