输出和输入字典

时间:2018-08-28 07:31:35

标签: python dictionary

嗨,我想将字典保存到csv,然后输入。但是在输出和输入方面,我遇到了一些问题。

对于输出,我尝试过:(D_FINAL是字典)

f = open("D_FINAL.csv", "w")
writer = csv.writer(f)
for k, v in D_FINAL.items():
    writer.writerow([k, v])
f.close

它工作正常,但是当我要打开csv时,它说文件已被锁定,无法编辑

我尝试输入

import csv
dict = {}
r = open('D_FINAL3.csv', 'r')
for k, v in csv.reader(r):
    dict[k] = v

r.close()

但是我出错了

ValueError                                Traceback (most recent call last)
<ipython-input-92-d3e2b3081317> in <module>()
      3 dict = {}
      4 r = open('D_FINAL2.csv', 'r')
----> 5 for k, v in csv.reader(r):
      6     dict[k] = v
      7     
ValueError: not enough values to unpack 
(expected 2, got 0)

做这些的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

在Windows(python 3)上,如果您不使用open("D_FINAL.csv", "w",newline=""),则生成的csv文件会有多余的空行(因为插入了额外的回车符,使得行\r\r\n这样的结尾)

不幸的是,那些双回车返回字符以不同的方式回读:它在每个有效数据行之后生成一个空白行。由于行中没有任何元素,因此解压缩失败。

有关此不良副作用的更多信息:CSV file written with Python has blank lines between each row

因此,阅读时会出现空白行。

只需这样做(并将python技能升级一个档次):

with open("D_FINAL.csv", "w", newline="")  as f:  # python 2: use: "wb"
    writer = csv.writer(f)
    writer.writerows(D_FINAL.items())

(与writerows一并写入,使用with块,这样您就不会错过对close的调用并且文件不再被锁定)

请注意,json模块最适合读写字典(如果需要序列化的话)

此外:最好也使用更好的技术来回读(似乎newline的东西在阅读时并不是必需的):

with open("D_FINAL.csv", "r", newline="")  as f:  # python 2: use: "rb"
    writer = csv.reader(f)
    output = {k:v for k,v in writer}  # unpack+dictionary comprehension

答案 1 :(得分:1)

查看您提供的代码,似乎您实际上并没有通过调用f.close()关闭文件。将f.close更改为f.close()应该可以帮助您解决此问题。 但是请记住,您可以通过实现with块来改进代码。例如

with open("D_FINAL.csv", "w",newline="") as f:
    writer = csv.writer(f)
    for k, v in D_FINAL.items():
        writer.writerow([k, v])

答案 2 :(得分:0)

也许您可以为此目的使用pandas

import pandas as pd
pd.DataFrame.from_dict(data=D_FINAL, orient='index').to_csv('D_FINAL.csv')

希望这会有所帮助。