我是一名新手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 的内容,它应该从文本文件中读取数据。但是,文本文件内容以某种方式不会被读取到新字典,这是空的。
如何修复此问题以将文本文件内容加载到字典中?
答案 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