模拟自动生成银行交易流水,其中包括:入账账号、出账账号、交易金额、交易余额、交易时间、出入表示关键字段
import datetime
import random
import os
import pandas as pd
path = 'D:\\data\\temp.csv'
bal_dic = {}
for i in range (0,10000):
amt = 0
bal_amt = 0
acct=datetime.datetime.now().strftime("%Y%m%d%H%M%S")
randomNum=random.randint(0,99)
randomNum22 = ''
if randomNum<=10:
randomNum22=str(0)+str(randomNum)
acct = str(acct)+str(randomNum22)
print(acct)
if(acct in bal_dic):
bal_amt = bal_dic[acct]
else:
bal_amt = 0
dateN = randomNum//2
tr_dt = random.randint(20230101, 20230131)
startHour = 000000
for m in range(dateN):
ret = random.randrange(6213910000300920000, 6213910000300935000)
startHour = random.randint(startHour, 245959)
samples = ["C", "D"]
debit_credit = random.sample(samples, 1)
if(debit_credit[0] == 'C'):
amt = round(random.uniform(0.1,100005.4), 2)
bal_amt += amt
bal_dic[acct] = bal_amt
else:
if(bal_amt < 0.1):
continue
amt = round(random.uniform(0.1,bal_amt ), 2)
bal_amt -= amt
bal_dic[acct] = bal_amt
df = pd.DataFrame(data=[[str(acct), str(ret), debit_credit[0], amt, round(bal_amt, 2), tr_dt, str(tr_dt) + " " + str(startHour)]])
if not os.path.exists(path):
df.to_csv(path, header=['acct', 'opp_acct', 'debit_credit', 'amt', 'bal_amt', 'tr_dt', 'tr_tm'], index=False, mode='a')
else:
df.to_csv(path, header=False, index=False, mode='a')
ret = random.randrange(6213910000300920000, 6213910000300935000)
startDate = 20230101
startHour = 000000
for ff in range(dateN):
startDate = random.randint(startDate, 20230131)
startHour = random.randrange(startHour, 245959, (245959//dateN))
samples = {"C", "D"}
debit_credit = random.sample(samples, 1)
if(debit_credit[0] == 'C'):
amt = round(random.uniform(0.1,100005.4), 2)
bal_amt += amt
bal_dic[acct] = bal_amt
else:
if(bal_amt < 0.1):
continue
amt = round(random.uniform(0.1,bal_amt), 2)
bal_amt -= amt
bal_dic[acct] = bal_amt
df = pd.DataFrame(data=[[str(acct), str(ret), debit_credit[0], amt, round(bal_amt, 2), tr_dt, str(tr_dt) + " " + str(startHour)]])
if not os.path.exists(path):
df.to_csv(path, header=['acct', 'opp_acct', 'debit_credit', 'amt', 'bal_amt', 'tr_dt', 'tr_tm'], index=False, mode='a')
else:
df.to_csv(path, header=False, index=False, mode='a')