2009-12-14 35 views
10

假設我在小應用程序中有以下字典。將變量寫入文件,包括名稱

dict = {'one': 1, 'two': 2} 

如果我想將確切的代碼行(包含字典名稱和全部)寫入文件,該怎麼辦? python中有一個函數讓我這麼做嗎?或者我必須先將其轉換爲字符串?轉換它不是一個問題,但也許有一個更簡單的方法。

我不需要一種方法將它轉換爲字符串,我可以做。但是如果有一個內置的函數爲我做了這個,我想知道。

爲了明確這一點,我想寫入該文件是什麼:

write_to_file("dict = {'one': 1, 'two': 2}") 
+2

也許你會說一點關於* *爲什麼要這麼做? – 2009-12-14 15:10:18

+0

對不起,還不太清楚。你的意思是你只是想知道如何寫一個任意字符串到文件? – 2009-12-14 16:23:41

+0

我在將整個字典行寫入一個文件後,包括字典變量的名稱,因爲在這種情況下是'字典'。這將是全部27個字母。 – Orjanp 2009-12-14 19:15:58

回答

37

repr函數將返回一個字符串,它是dict的精確定義(除了元素的順序,dicts在python中是無序的)。不幸的是,我無法說出一種方法來自動獲取表示變量名稱的字符串。

>>> dict = {'one': 1, 'two': 2} 
>>> repr(dict) 
"{'two': 2, 'one': 1}" 

寫入文件是非常標準的東西,像任何其他文件的寫:

f = open('file.py', 'w') 
f.write('dict = ' + repr(dict) + '\n') 
f.close() 
+0

@bryan:我很抱歉,我錯誤地認爲寫入文件非常明顯......奇怪的是,事實並非如此。 – 2009-12-14 15:24:34

+0

謝謝,我結束了這樣做。將它寫入文件實際上不是問題。 – Orjanp 2009-12-16 08:03:42

14

使用pickle

import pickle 
dict = {'one': 1, 'two': 2} 
file = open('dump.txt', 'w') 
pickle.dump(dict, file) 
file.close() 

,並看了一遍

file = open('dump.txt', 'r') 
dict = pickle.load(file) 

編輯:猜猜我誤解了你的問題,對不起......但泡菜也可能會有所幫助。 :)

+0

寫出字典,但不是字典的名稱。 – 2009-12-14 13:50:03

0

的字典中的默認字符串表示似乎是恰到好處:

>>> a={3: 'foo', 17: 'bar' } 
>>> a 
{17: 'bar', 3: 'foo'} 
>>> print a 
{17: 'bar', 3: 'foo'} 
>>> print "a=", a 
a= {17: 'bar', 3: 'foo'} 

不知道,如果你可以在「變量名」獲得的,因爲在Python變量只是標籤的值。見this question

4

你可以這樣做:

import inspect 

mydict = {'one': 1, 'two': 2} 

source = inspect.getsourcelines(inspect.getmodule(inspect.stack()[0][0]))[0] 
print [x for x in source if x.startswith("mydict = ")] 

另外:確保不影着字典內置!

+0

謝謝。我沒有想到字典的陰影。有一些清潔工作要做。 – Orjanp 2009-12-14 19:20:15

17

是這樣的東西你在找什麼?

def write_vars_to_file(_f, **vars): 
    for (name, val) in vars.items(): 
     _f.write("%s = %s\n" % (name, repr(val))) 

用法:

>>> import sys 
>>> write_vars_to_file(sys.stdout, dict={'one': 1, 'two': 2}) 
dict = {'two': 2, 'one': 1} 
+2

好東西,現在我們怎麼讀回來? – gatopeich 2013-07-26 09:34:18

+0

我知道這是一箇舊帖子,但是有沒有一個原因使用'_f'作爲參數名稱?我具體詢問使用'_'。這是在一個風格指南或只是一個私人約定? – 2017-11-11 15:30:20

0

你只是想知道如何寫一行到file?首先,你需要打開文件:

f = open("filename.txt", 'w') 

然後,你需要寫的字符串寫入文件:

f.write("dict = {'one': 1, 'two': 2}" + '\n') 

可以重複此爲每個行(+'\n'增加了一個新行,如果你想要它)。

最後,你需要關閉該文件:

f.close() 

您也可以稍微更聰明和使用with

with open("filename.txt", 'w') as f: 
    f.write("dict = {'one': 1, 'two': 2}" + '\n') 
    ### repeat for all desired lines 

這將自動關閉文件,即便異常升高。

但我懷疑這是不是你問...

+0

你是對的。寫入文件我可以做。 :) – Orjanp 2009-12-14 19:21:10