python – 我们如何修改搁置中的数据?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 我们如何修改搁置中的数据?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2574字,纯文字阅读大概需要4分钟。
内容图文
我使用以下代码打开了一个货架:
#!/usr/bin/python
import shelve #Module:Shelve is imported to achieve persistence
Accounts = 0
Victor = {'Name':'Victor Hughes','Email':'victor@yahoo.com','Deposit':65000,'Accno':'SA456178','Acctype':'Savings'}
Beverly = {'Name':'Beverly Dsilva','Email':'bevd@hotmail.com','Deposit':23000,'Accno':'CA432178','Acctype':'Current'}
def open_shelf(name='shelfile.shl'):
global Accounts
Accounts = shelve.open(name) #Accounts = {}
Accounts['Beverly']= Beverly
Accounts['Victor']= Victor
def close_shelf():
Accounts.close()
我能够将值附加到货架但无法修改值.
我已经定义了一个函数Deposit(),我想从中修改shelve中存在的数据.但是它给了我以下错误:
Traceback (most recent call last):
File "./functest.py", line 16, in <module>
Deposit()
File "/home/pavitar/Software-Development/Python/Banking/Snippets/Depositfunc.py", line 18, in Deposit
for key in Accounts:
TypeError: 'int' object is not iterable
这是我的功能:
#!/usr/bin/python
import os #This module is imported so as to use clear function in the while-loop
from DB import * #Imports the data from database DB.py
def Deposit():
while True:
os.system("clear") #Clears the screen once the loop is re-invoked
input = raw_input('\nEnter the A/c type: ')
flag=0
for key in Accounts:
if Accounts[key]['Acctype'].find(input) != -1:
amt = input('\nAmount of Deposit: ')
flag+=1
Accounts[key]['Deposit'] += amt
if flag == 0:
print "NO such Account!"
if __name__ == '__main__':
open_shelf()
Deposit()
close_shelf()
我是Python的新手.请帮忙.如果我错了,请更正我.我需要有人对这段代码的功能给出一些解释.我很困惑.
解决方法:
首先,不要使用全局帐户,而是来回传递它.使用全局导致您的错误.像这样:
def open_shelf(name='shelfile.shl'):
Accounts = shelve.open(name) #Accounts = {}
...
return Accounts
def close_shelf(Accounts):
Accounts.close()
def Deposit(Accounts):
...
if __name__ == '__main__':
Accounts = open_shelf()
Deposit(Accounts)
close_shelf(Accounts)
其次,不要重新定义内置函数.在Deposit()中,将raw_input的结果分配给名为input的变量:
input = raw_input('\nEnter the A/c type: ')
四行之后,您尝试使用内置输入功能:
amt = input('\nAmount of Deposit: ')
但这不起作用,因为输入已被重新定义!
第三,当迭代搁置物品时,遵循以下模式:1)抓住搁置物品,2)变异物品,3)将变异物品写回架子.像这样:
for key, acct in Accounts.iteritems(): # grab a shelved item
if val['Acctype'].find(input) != -1:
amt = input('\nAmount of Deposit: ')
flag+=1
acct['Deposit'] += amt # mutate the item
Accounts[key] = acct # write item back to shelf
(第三点建议是从hughdbrown的答案中调整过的.)
内容总结
以上是互联网集市为您收集整理的python – 我们如何修改搁置中的数据?全部内容,希望文章能够帮你解决python – 我们如何修改搁置中的数据?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。