首页 > 解决方案 > 在python中打开一个文件并使用里面的数据来创建多个变量

问题描述

对于我的任务,我被要求创建一个 python ATM。我将在我制作的 txt 文件中包含所有余额、帐户详细信息、密码和帐号。我将如何访问该文件,然后从该数字中创建一个变量,然后该变量可用于扣除余额、添加余额并更改密码。到目前为止,我所做的是:

f = open('info.txt').read().split()
print(f)

我坚持使用这些值在实际程序中创建变量

文件中的测试看起来像

Accountnumber 123412341234 
Accountpin 1234 
Creditcardbal 0 
Savingsbal 0 
Name Alex

那么如何从上面的数据创建一个名为 creditcardbal 的变量,如果我想更改它,我该如何在文件中编辑它。

标签: python

解决方案


首先,您不应该以您所展示的方式存储信息。存储此类信息的一种非常有效的方法是使用 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 文件内容(执行前后),你会得到你的作业的想法


推荐阅读