Python:将字典写入文本文件(CSV?)并将该文本文件读入字典

时间:2016-07-19 19:19:25

标签: python-2.7 csv dictionary import text-files

我是一名新手Python程序员,所以答案可能很简单。但是,我花了几天时间研究这个单一的问题而且我很难过。这也是我的第一个Stack Overflow帖子,所以如果我在这里打破一些规则,请善待。 :)

使用Python,我希望将多行中的两个字段写入新的文本文件,稍后再运行将该文本文件读入新字典以引用以前的值。

我正在测试我在此处找到的代码:Example code。提供的解决方案有64个向上投票,并被提问者标记为最佳答案。所以对大多数人来说似乎都是正确的。

我的测试代码成功创建了一个初始字典 mydict 并将其保存到文本文件中。但是,当我尝试将文本文件重新读回新词典 mydict2 时,我得到......什么都没有...什么都没有,没有错误信息或任何东西,没有线索,什么也没有。< / p>

我在这里缺少什么?

这是我的测试代码

import csv

mydict = {1:11,2:22,3:33}
print mydict
print mydict[1]

writer = csv.writer(open('dict.csv', 'wb'))
for key, value in mydict.items():
   writer.writerow([key, value])

reader = csv.reader(open('dict.csv', 'rb'))
mydict2 = dict(reader)

print mydict2

以下是它创建的文本文件的内容:

1,11
2,22
3,33

以下是运行测试代码时显示的结果

{1: 11, 2: 22, 3: 33}
11
{}

正如您在前两行结果输出中所看到的,初始输出字典 mydict 已正确创建并显示参考值。但是,第三行输出显示新词典 mydict2 的内容,它应该从文本文件中读取数据。但是,文本文件内容以某种方式不会被读取到新字典,这是空的。

如何修复此问题以将文本文件内容加载到字典中?

3 个答案:

答案 0 :(得分:1)

问题不在于关闭文件。您的原始文件未完全刷新到磁盘。当with块退出时,with语句将自动关闭文件。

import csv

mydict = {1:11,2:22,3:33}
print mydict
print mydict[1]

with open('dict.csv','wb') as f:
    writer = csv.writer(f)
    for key, value in mydict.items():
        writer.writerow([key, value])

with open('dict.csv','rb') as f:
    reader = csv.reader(f)
    mydict2 = dict(reader)

print mydict2

输出:

{1: 11, 2: 22, 3: 33}
11
{'1': '11', '3': '33', '2': '22'}

答案 1 :(得分:0)

我不确定以下是最优雅的答案,但显然提供了.csv文件的绝对路径帮助。以下内容应该为您提供所需的字典对象,从您创建的csv中读取:

import csv

mydict = {1:11,2:22,3:33}
print(mydict)
print(mydict[1])

with open('C:\\Python27\\dict.csv', 'wb') as writer:
   writer = csv.writer(writer)
   for item in mydict.items():
      writer.writerow(item)

with open('C:\\Python27\\dict.csv', 'rb') as reader:
   reader = csv.reader(reader)
   for line in reader:
       mydict2[int(line[0])] = int(line[1])
   #mydict2 = {line[0]:line[1] for line in reader} ...build mydict2 as a comprehension.

print(mydict2)

祝你好运!

答案 2 :(得分:0)

然后是这个。它也会关闭文件。感谢教练们!

import csv

mydict = {1:11,2:22,3:33}
print mydict
print mydict[1]

f = open('dict.csv', 'wb')
writer = csv.writer(f)
for key, value in mydict.items():
   writer.writerow([key, value])
f.close()

f = open('dict.csv', 'rb')
reader = csv.reader(f)
mydict2 = dict(reader)
f.close()

print mydict2