摆脱自动引用CSV文件

时间:2014-10-20 16:56:13

标签: python load save quotes file-format

我制作了一个以元组为键的字典。加载后字典应如下所示:

dictionary = {("key1", "key2"): "value"}

问题在于,当我将其保存到CSV文件中时,会添加不必要的引号,因此它看起来像这样:

dictionary = {"("key1", "key2")": "value"}

我保存和加载文件的代码如下所示:

def Save(self):
    w=csv.writer(open("file.csv", "w"))
    for key, val in self.dictionary.items():
        w.writerow([key, val])
def Load(self):
    self.dictionary={}
    for key, val in csv.reader(open("file.csv")):
        self.dictionary[key] = val
        print self.dictionary.keys()

任何人都知道如何做到这一点?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我猜到了哪种类可能有这些方法,并在file.csv中产生了这个输出:

"('key1', 'key2')",value

这对我来说很好。

请记住,元组中的逗号在CSV文件中具有不同的含义:它是字段分隔符。 csv.writer必须转义或引用该逗号,否则CSV文件将包含三个列,而不是您期望的两个。典型的转义方法是将单元格的内容用引号括起来。

最后,CSV文件永远不会存储对象,它们存储字符串(技术上是字节,open转换为字符串)。迭代csv.reader会为CSV文件中的每一行返回 strings 元组,而不是元组或列表甚至整数。

要将该字符串转换回其他数据类型,您必须将其传递给intfloat之类的函数(如果您碰巧知道它应该是整数或浮动-point number),或者评估字符串。这是一件非常危险的事情,所以 尝试自己评估字符串,并且不相信内置的eval函数要做它适合你。 使用ast.literal_eval函数,尽可能安全地执行此操作。