如何更新CSV文件中的特定位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更新CSV文件中的特定位置?相关的知识,希望对你有一定的参考价值。

我目前正在做一个任务,我们得到了一个库系统的骨架代码,用户可以从一个菜单中输入各种命令,允许他们查询或签出项目。用户能够从一个菜单中输入各种命令,允许他们查询或签出项目。

这些项目存储在两个CSV文件中(library_collections["电影"],library_collections["书籍"]),并且已经被骨架代码加载。

当用户在菜单上输入命令后,他们会被提示输入一个项目ID,这个ID应该与CSV文件中的ID相匹配。

下面是我的Check in的代码。

 def cib(id , library_collections):
     for i in library_collections["books"]:
         if id == i["ID"]:
             i["Available"]=i["Available"]+1
             return 'Item has successfully Been Checked In'
         elif id != i['ID']:
             return 'Please restart the program and enter a valid ID'

签入功能的输出output: None

这是我的结账代码。

def cob(id, library_collections):
    for i in library_collections["books"]:
        if id == i["ID"]:
            if i["Available"] > 0:
                i["Available"] = i["Available"] - 1
                return('Item Successfully Checked-out')
            elif i["Available"] == 0:
                print('There are no more available copies')
        elif id != i["ID"]:
            return'Please restart the program and enter a valid ID'

结账的输出 output: 'Please restart the program and enter a valid ID'

每当我输入一个我知道在CSV文件中的ID时,这两个函数给我的输出和上面写的一样。因此,这两个函数对CSV文件没有影响。

答案

如果你的引导不是第一个在列表中,你落到elif和返回错误信息。

这可能有用。

def cib(id , library_collections):
     for i in library_collections["books"]:
         if id == i["ID"]:
             i["Available"]=i["Available"]+1
             return 'Item has successfully Been Checked In'
     return 'Please restart the program and enter a valid ID'

所以你先循环浏览所有的书 如果没有找到书,你就会返回错误信息。

在cob方法中也是如此

循环浏览dict的列表不是有效的方法。如果我正在编写这样的东西,并且由于某些原因我不能使用适当的数据库,我会将CSV解析为dict。Datamodel可能是这样的。

{ 1: {"available": 10, "name": "Hamlet", "author": "W. Shakespeare", "year": 1609},
  123: {"available": 0, "name": "Война и мир", "author": "L. Tolstoi", "year": 1869},
}

其中1和123是id 你也可以用用户字符串作为id。然后,你可以简单地做你的方法,比如

def cib(id, library_collection): 
   try:
       library_collection[id]["available"] += 1
       return 'Item has successfully Been Checked In'
   except:
        return 'Please restart the program and enter a valid ID'

def cib(id, library_collection): 
    if id in library_collection:
       library_collection[id]["available"] += 1
       return 'Item has successfully Been Checked In'
    else:
        return 'Please restart the program and enter a valid ID'

避免for-loops总是好主意。

以上是关于如何更新CSV文件中的特定位置?的主要内容,如果未能解决你的问题,请参考以下文章

python 如何将数据写入某个csv文件的特定位置?

如何使用bash脚本从csv文件中读取特定的整数?

在python中,如何更新CSV文件中超过5K行的值?

如何更新 CSV 文件中的行

如何在文本区域标签中的特定光标位置插入选择标签下拉值作为文本片段?

编辑和更新csv文件MFC的特定行/列的数据[关闭]