【问题标题】:Modify dictionary in csv file using user input and save使用用户输入修改 csv 文件中的字典并保存
【发布时间】:2019-07-05 09:38:25
【问题描述】:

我找不到直接解决我的问题的方法(可能是一个非常简单的方法,但仍然...),无论是在这里还是在互联网上。

我创建了一个字典并使用csv.DictWriter将其保存在一个CSV文件中

# Starting dict
d= {'key1':'value1', 'key2':'value2'}

# Writing down the dict and saving
with open('mycsvDict.csv', 'w') as f:
    w= csv.DictWriter(f, d.keys())
    w.writeheader()
    w.writerow(d)

现在我的字典在 CSV 文件中,我正在将其读回字典并尝试使用用户输入对其进行修改。

# Ask user for new key, value
data_to_append= {}
user_key= input("Write new key: ")
user_val= float(input("Insert new value: "))

data_to_append[user_key]= user_val

#trying to append in the file
with open('mycsvDict.csv', 'a') as app_f:
    from csv import writer
    w= csv.DictWriter(app_f, data_to_append.keys())
    w.writerow(data_to_append)

print(data_to_append)

我从正确打印的用户 (ofc) 那里获得了带有新键和值的新字典,但我的 CSV 文件没有被修改。 我无法保存新的更新版本。 我做错了什么?

【问题讨论】:

  • 有没有弹出错误?
  • 不,没有错误。但是代码没有执行我想做的事情。它不会在原始文件中附加新项目(带值)。
  • 我试过了,它奏效了。这是您的代码的准确表示吗?另请发布预期输出。
  • 也就是说,我认为这不是您想要的。字典编写器将键打印为标题,将值打印为行。如果您正在获取键的用户输入,无论键是什么,该行都将按照定义的字典顺序写入。这意味着它不会将键与原始列匹配。这真的是您想要填充 CSV 文件的方式吗?
  • 哦,太好了。我的意思是,我在这里写信也是为了获得新知识。那么,您建议我执行哪些步骤?我希望新的键值被添加到字典中

标签: python-3.x csv dictionary


【解决方案1】:

这应该符合您的期望

with open('mycsvDict.csv', 'a') as app_f:
    for key in data_to_append.keys():
        app_f.write("%s,%s\n" % (key, data_to_append[key]))

【讨论】:

  • @Marco 要将键值对添加到下一行还是下一列?我的代码将其添加到下一行。我认为这不是你要找的
  • 在尝试了您的代码后,我将文件 csv 作为 excel 打开,我更喜欢您的代码,因此在下一行有新项目(键和值)。目前,我创建了一个 dict,其中一行中包含键,下一行中包含值,但如果键值对在同一行上,则可视化似乎更简单。
  • 是的,在字典中加载会更容易,您可以在附加密钥之前验证是否已经存在
  • 与其对键进行迭代,不如直接对键值元组进行迭代。
  • 随着时间的推移,我会想检查一个键是否已经存在,并且我想在特定键的值内工作(可能需要一些计算)。
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2020-11-18
  • 2020-09-14
相关资源
最近更新 更多