有一个名称/值集合,想把它写出来一个文件

时间:2010-11-07 15:44:24

标签: python

我有一个像这样的名字/价值集:

for k,v in sorted(userlist):
    print k, v

如何将其写入文件,将每个键放在一行上,如果文件存在,我希望它能够完全覆盖。

然后我会手动修改文件,然后我想把文件读回字典。

对不起这个新人。

4 个答案:

答案 0 :(得分:3)

看一下http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files这应该可以让你快速了解如何在python中读取和写入文件

这是写文件:

f = open('/tmp/workfile', 'w')
delimiter = ' '
for k,v in sorted(list):
  f.write(k +delimiter+ v)

这是阅读文件:

f = open('/tmp/workfile')
map = {}
while f:
  r = f.readline().split()
  map[r[0]]=r[1]

答案 1 :(得分:2)

您希望如何格式化?我会让你决定格式化

with open( filename, 'w' ) as file:
    def write_to_file( (key, value) ):
        #put your formatting down below
        file.write( str( key ) + ", " + str( value ) )

    map( write_to_file, sorted( userlist ) )

原始答案没有关闭文件。

以下是你所拥有的:

with open( filename, 'w' ) as file:
    for k,v in sorted( userlist ):
        file.write( str( k ) + ", " + str( v ) )

答案 2 :(得分:0)

简单:

import json

read = json.load
write = lambda file, obj : json.dump(obj, file, sort_keys=True, indent=4)

答案 3 :(得分:0)

似乎很不知道pickle输出通常很容易用手改变。可能因为许多其他序列化工具没有允许这样做的文件格式,但也出于安全原因(参见示例后的注释)

一个例子:

#import pickle
mydict = {}
mydict[0] = "100";
mydict[1] = "1000";
file = open('example.txt','w')
pickle.dump(mydict,f)

之后我将直接在texfile中更改textvalue :('10'变为'99','100'变为'999'

(dp0
I0
S'99'
p1
sI1
S'999'
p2
s.

然后,我们再次加载文件并显示结果:

f = open('example.txt','r')
mydict = pickle.load(f)
print mydict

我们确实得到了改变的输出:

{0: '99', 1: '999'}

我已经成功地尝试了很多数据类型和超过一百万行的文件。

警告更改文件结构会导致文件无法读取

只要先备份序列化数据,就可以这样做。