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

问题描述 投票:0回答:1

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

这些项目存储在两个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文件没有影响。

python python-3.x csv
1个回答
0
投票

如果你的引导不是第一个在列表中,你落到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总是好主意。

© www.soinside.com 2019 - 2024. All rights reserved.