【发布时间】:2020-12-15 04:24:34
【问题描述】:
提前,这是我在这里的第一个问题,如果我的问题不清楚或过度,请原谅。我一般是编码新手,但我试图制作一个作为计算机部件目录的程序,只是为了练习编码。目前我已经设置好了,所以当我输入一个新项目时,它会经过一个类,并且该项目被赋予一个 ID #、名称、成本等......计算机部分被放入一个以 ID # 作为键的字典,并且值是类对象。我计划稍后能够按名称、成本等不同属性对不同部分进行排序......我正在尝试将字典保存到 csv 文件中,以便每次启动/结束程序时,我的计算机部件都来自上一次还存在。我试图通过在每次程序启动时将 csv 文件导入字典来实现这一点,这样我就可以查找或编辑任何以前的部分。然后,一旦我进行了任何更改,将使用更新的信息再次写入 csv 文件。因此,目前如果我在仅制作 1 部分后选择“7”选项,它将作为更新,并且应该将字典中的所有内容(仅一部分)发送到 csv 文件。
elif choice == "7":
with open('part_list.csv', 'w', ) as file:
writer = csv.writer(file)
for key, value in part_dict.items():
writer.writerow([key, value])
当我这样做时,csv 文件看起来像:
1,<__main__.Computer_Part object at 0x000001A723F6DFA0>
然后我希望能够退出程序,当我回来时我希望能够仍然拥有这部分,所以我会将信息从 csv 文件导入回原始字典(即现在自从我重新打开程序后空白)。我尝试使用以下代码来完成此操作:
def import_part_dict():
with open('part_list.csv', 'r') as file:
reader = csv.reader(file)
part_dict = {}
for row in reader:
key, value = row
part_dict[key] = row
return part_dict
但是,这样做会返回“ValueError: no enough values to unpack (expected 2, got 0)”。我不确定为什么这不会将 csv 文件值添加回字典。任何帮助将非常感激。这段代码是用 Python 3.9 编写的,如果这有什么改变的话。
【问题讨论】:
-
看来您必须先将数据转换为字符串,然后才能保存为 CSV。 Python 不会自动为你做这件事。如果您有带有
name, cost,的对象,那么您可能需要.writerow([key, value.name, value,cost])而不是.writerow([key, value]) -
也许可以使用
print(row)来查看您在阅读文件时会得到什么。它可以帮助您看到问题。您也可以在文本编辑器中打开 CSV 文件来查看您保存的内容。 -
嘿 Furas,值是类对象这一事实会改变吗?例如,cvs 文件不显示“1, IntelCore, CPU, 25”。相反,它显示“1,class_object”,其中 1 是键(ID #),所以我相信名称、类型和价格等所有信息都保存在该 class_object 中。
-
问题是你将它保存在类中,而 Python 没有方法将类转换为包含类中所有值的列表。你必须自己做——
writerow([key, value.id, value.name, value,cost, ...]),当你从文件中读取它时也是如此。最好使用熊猫。或将其保存在数据库中(即 SQLite)。两者(熊猫,数据库)都有许多有用的功能来排序,过滤。通常你必须从头开始编写所有函数。 -
@furas 谢谢。我看到其他人推荐了熊猫,所以我正在看一下。使用 pandas 是否意味着我不需要使用该类?
标签: python csv dictionary