【问题标题】:Cannot make dictWriter to build csv无法让 dictWriter 构建 csv
【发布时间】:2020-09-15 05:11:48
【问题描述】:

我是 Python 世界的新手,所以很难理解 dictwriter 的工作原理。我正在尝试从字典中创建一个 csv 文件,其中每个键都附加了一个元组作为值,但无法弄清楚如何。代码(字典“book”必须出名为“saving”的函数):

book = {"000011111":("John","Doe",23,"Kendo"),"000022222":("Petra","Richards",22, "Swimming")}
import csv
def saving():
    try:
        f = open("file1.csv", "w+")
        fields = ["Card", "Name", "Surname", "Age", "Hobbie"]
        writer = csv.DictWriter(f, fieldnames=fields)
        writer.writeheader()
        writer.writerows({"Card": book.keys(), "Name": book[0], "Surname": book[1], "Age": book[2], "Hobbie": book[3]})
        print("Data saved to csv")
        return True
    except IOError:
        print("I/O ERROR")
        return False
saving()

给我:

密钥错误:0

【问题讨论】:

  • 感谢 ggorlen,我已对其进行了编辑(复制/粘贴而不是打字),现在看来是合法的。还添加了缺少的最后一行。
  • python3 字典不支持索引。 book[0] 左右会导致 key 错误,不需要在 key book["000011111"] 上查找

标签: python-3.x function csv dictionary tuples


【解决方案1】:

book 是一个字典。它不能按位置索引(例如book[0]),它有键和值。您可能希望遍历book 中的所有键/值对,如下所示:

book = {"000011111":("John","Doe",23,"Kendo"),"000022222":("Petra","Richards",22, "Swimming")}
def saving():
    try:
        for codekey, first_last_age_hobby in book.items():
            f = open("file1.csv", "w+")
            fields = ["Card", "Name", "Surname", "Age", "Hobbie"]
            writer = csv.DictWriter(f, fieldnames=fields)
            writer.writeheader()
            writer.writerows({
                "Card": codekey,
                "Name": first_last_age_hobby[0],
                "Surname": first_last_age_hobby[1],
                "Age": first_last_age_hobby[2],
                "Hobbie": first_last_age_hobby[3]
            })
            print("Data saved to csv")
        return True
    except IOError:
        print("I/O ERROR")
        return False

你错过了一个循环来获取每个键的四个值。快乐编码!

【讨论】:

  • 您好山姆,感谢您的回答。行: >>>for codekey, first_last_age_hobby = book.items(): 给我一个语法错误,所以我尝试将其替换为: >>>for g in book.items(): And line: >>>writer = csv .DictWriter(f, fieldnames=fields) With: >>>writer = g.DictWriter(f, fieldnames=fields) 但是给我一个错误:AttributeError: 'tuple' object has no attribute 'DictWriter'
  • 抱歉,应该是 for codekey, first_last_age_hobby in book.items(): -- in 而不是 =,这是一个错字。如果你在 python3 中,book.items() 一次给你两个值,一个 keyvalue 对。随着您的代码更改,您将键和值都分配给一个变量,元组g。然后尝试使用不存在的g.DictWriter。尝试回到我更新的代码。
  • 非常感谢山姆!!!,包含您的建议后工作正常。
  • 太棒了!如果您喜欢我的回答,请点赞并选择正确,这有助于建立响应者社区!
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
相关资源
最近更新 更多