2009-12-14 66 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