嗨,我想将字典保存到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)
做这些的正确方法是什么?
答案 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')
希望这会有所帮助。