python - 在python中打开一个文件并使用里面的数据来创建多个变量
问题描述
对于我的任务,我被要求创建一个 python ATM。我将在我制作的 txt 文件中包含所有余额、帐户详细信息、密码和帐号。我将如何访问该文件,然后从该数字中创建一个变量,然后该变量可用于扣除余额、添加余额并更改密码。到目前为止,我所做的是:
f = open('info.txt').read().split()
print(f)
我坚持使用这些值在实际程序中创建变量
文件中的测试看起来像
Accountnumber 123412341234
Accountpin 1234
Creditcardbal 0
Savingsbal 0
Name Alex
那么如何从上面的数据创建一个名为 creditcardbal 的变量,如果我想更改它,我该如何在文件中编辑它。
解决方案
首先,您不应该以您所展示的方式存储信息。存储此类信息的一种非常有效的方法是使用 csv(逗号分隔值)文件。对于您的情况,一个 csv 文件将如下所示。继续并将其存储在名为 atm.csv 的文件中(如果您愿意,可以更改扩展名。
Accountnumber,Accountpin,Creditcardbal,Savingsbal,Name
123412341234,1234,0,0,Alex
587452639810,5879,230.20,1265.88,Hans Muster
继续并使用以下代码创建一个名为 atm.py 的 python 文件
import csv
global atm
class Account:
def __init__(self, anum, apin, crbal, savbal, name):
self.account_number = anum
self.account_pin = apin
self.credit_balance = float(crbal)
self.savings_balance = float(savbal)
self.name = name
def change_credit_balance(self, balance):
self.credit_balance = self.credit_balance + balance
def change_savings_balance(self, balance):
self.savings_balance = self.savings_balance + balance
def change_account_pin(self, pin):
self.account_pin = pin
def __str__(self):
return "name: %s, account_number: %s, credit_balance: %s, savings_balance: %s, account_pin: %s" \
%(self.name, self.account_number, self.credit_balance, self.savings_balance, self.account_pin)
atm = []
def increase_all_savings(amount):
for account in atm:
account.change_savings_balance(amount)
def print_all_accounts():
for account in atm:
print(account)
def load_data():
with open('atm.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
if line_count == 0:
# for the first row which is column header
pass
else:
print('Values are %s', ",".join(row))
# data, one record per line
atm.append(Account(row[0], row[1], row[2], row[3], row[4]))
line_count += 1
def store_data():
with open('atm.csv', mode='w') as csv_file:
csv_writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
# write header or column names
csv_writer.writerow(['Accountnumber','Accountpin','Creditcardbal','Savingsbal','Name'])
# write all records
for account in atm:
csv_writer.writerow([account.account_number, account.account_pin, account.credit_balance, account.savings_balance, account.name])
if __name__ == '__main__':
load_data()
print("=========")
print("Initial state")
print_all_accounts()
increase_all_savings(30)
print("=========")
print("State after increasing savings balance by 30")
print_all_accounts()
store_data()
像这样执行这个python文件(假设你有python3)
python3 atm.py
仔细按照打印的输入、输出和 csv 文件内容(执行前后),你会得到你的作业的想法
推荐阅读
- c# - 将“或”条件应用于字符串
- raspberry-pi - Raspberry Pi 中的 ElectronJS 电子生成器构建错误
- xpath - 有没有办法改变 fn:path() 的返回值?
- java - 出现错误:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径为 STRING
- sdn - 在 Mininet 上同时创建来自主机的流量
- django - 带有 pytest-django 的 Heroku CI 失败 - 模块“未声明显式 app_label”
- javascript - RXJS 在合并流之间共享状态
- c# - .NET :- 加入表后发现 Distinct
- spring-boot - 是否可以在 Spring Security 中仅使用刷新令牌请求访问令牌 oauth2?没有基本身份验证?
- pine-script - 根据正日收盘值过滤盘中股票