在python中,如何将数据保存到csv文件和从csv文件检索数据,并将其保存到字典中



事先,这是我在这里的第一个问题,如果我的问题不清楚或太多,请原谅。一般来说,我对编码是新手,但我试图制作一个计算机零件目录程序,只是为了练习编码。目前,我已经设置好了它,当我输入一个新项目时,它会经过一个类,该项目会被赋予ID#、名称、成本等。计算机部分会被放入一个以ID#为键的字典中,值是类对象。我计划以后能够根据不同的属性(如名称、成本等(对不同的部分进行排序。我正在尝试将字典保存到csv文件中,以便每次启动/结束程序时,我以前的计算机部分仍然存在。我试图通过每次程序启动时将csv文件导入字典来实现这一点,这样我就可以查找或编辑以前的任何部分。然后,一旦我做了任何更改,csv文件将再次写入更新的信息。所以目前如果我选择"选择";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:没有足够的值进行解压缩(应为2,得到0("。我不知道为什么这不会将csv文件值添加回字典。任何帮助都将不胜感激。如果有什么变化的话,这段代码是用Python 3.9编写的。

在我看来,dict对于这类事情来说会很麻烦。我强烈建议您使用panda将csv数据带入数据帧。使用数据帧,您可以排序、添加/删除内容、运行查询、regex等。

import pandas as pd
path_to_csv = '/my/path/to/csv/test.csv'
df = pd.read_csv(path_to_csv)
>>> df
name     item  id
0  one  item001   1
1  two  item002   2
>>> df.iloc[0]
name        one
item    item001
id            1
Name: 0, dtype: object

https://www.learnpython.org/en/Pandas_Basics

items()返回dict_items而不是list。要将其转换为成对的键和值,只需执行list(foo.items())。但这个列表仍然是元组列表,就像这样:

[(foo,1),(bar,2),(baz,3)]

它需要被扁平化为一个列表。有很多方法可以实现它,但我展示了一个使用itertools的示例。

import itertools
list(itertools.chain(*{'a':1,'b':2}.items()))
# ['a', 1, 'b', 2]

最新更新