对于我正在计划的游戏,我想创建一段代码,该代码将从游戏中所有物品的列表中写入一个特定的值到玩家的库存中(例如:玩家获得物品“药水”,需要在CSV项目中搜索药水,然后将相关信息放入CSV)。每当我运行代码时,都会出现错误“ TypeError:'_ io.TextIOWrapper'对象不可下标”。
我尝试研究并询问同龄人,但最接近明确解决方案的是有人提到从CSV写入列表,但他们没有做更多解释。希望有人可以为我详细说明或提供更简单的解决方案。
import csv
allitems = open("ALLITEMS.csv")
checkallitems = csv.reader(allitems)
playerinv = open("INVENTORY.csv")
checkinv = csv.reader(playerinv)
item = input("")
for x in checkallitems:
print(allitems[x][0])
if item == allitems[x][0]:
playerinv.write(allitems[x][0]+"\n")
allitems.close()
playerinv.close()
答案 0 :(得分:0)
问题是allitems
是file object返回的open,并且语句for x in checkallitems
遍历了该文件的所有行,因此,您尝试使用{{ 1}}作为该文件中的索引。另外,您必须以写入模式(使用'w'或'a')打开list
才能对其进行写入。
只需使用INVENTORY.csv
而不是x
。以下代码段即可完成此任务:
allitems[x]
因此,完整的代码可能是:
for x in checkallitems:
if item == x[0]:
playerinv.write(x[0]+"\n")
我不知道您想完成什么,因此我尝试尽可能地坚持您的代码。
如果您只想写出用户提供的项目(如果找到该项目的当前列表),则可以完成此工作:
import csv
allitems = open("ALLITEMS.csv")
checkallitems = csv.reader(allitems)
playerinv = open("INVENTORY.csv", 'a')
checkinv = csv.reader(playerinv)
item = input("")
for x in checkallitems:
if item == x[0]: # Check if the item is equal to the first item on the list
playerinv.write(x[0]+"\n")
allitems.close()
playerinv.close()
我希望这可以为您提供帮助。让我知道这对您是否有用,否则,请告诉我出了什么问题。