欲使用csv.reader()讀取的cashflow.txt
副檔名叫.csv也一樣,
實際上就是逗點分隔檔
每一列的內容是現金流
-16,-16,-16,-16,-16,-16,100
表示第1~6年初繳費16
(負號表示現金流出)
第六年末 = 第七年初
解約金=100
其他列依此類推
import csv
import numpy_financial as npf
import numpy as np
year_IRR =[(“Year”,”IRR”)]
with open(“cashFlow.txt”,”r”) as f:
csvreader = csv.reader(f)
csvlst = []
for r in csvreader:
csvlst.append(r)
for r in range( len(csvlst) ):
for c in range( len(csvlst) ):
csvlst[r][c] = eval( csvlst[r][c] )
for row in csvlst:
csvAry = np.array(row)
myirr = round(npf.irr(csvAry),4)
#不知道為何有的資料取小數點下4位失敗
year = row.index(csvAry[-1])
myirrStr = str(myirr*100) + “%”
tup = (year,myirrStr)
year_IRR.append(tup)
print(year_IRR)
with open(“IRR_Calculate.csv”,”w”) as f2:
csv.writer(f2).writerows(year_IRR)
輸出結果
round函數的問題
有兩筆資料取小數點下4位失敗
輸出的csv檔:
改寫成轉exe檔所需要:
import csv
import numpy_financial as npf
import numpy as np
path = input(“請輸入逗點分隔檔的路徑+檔名.副檔名\n如:C:\\\Python\\\example\\\csvreader\\\cashflow.txt\n路徑請使用雙槓\\\ \n逗點分隔檔內容如:-16,-16,-16,-16,-16,-16,100\n表示第1~6年初繳費16(負號表示現金流出)\n第6年末=第7年初解約金100\n可以有多行,將回饋給您多年度的IRR\n若有不了解的地方請見:\nhttps://savingking.com.tw/blog/post/csv-reader \n請輸入: “)
year_IRR =[(“Year”,”IRR”)] #C:\Python\example\csvreader\cashFlow.txt
with open(path,”r”) as f:
csvreader = csv.reader(f)
csvlst = [r for r in csvreader]
#print(csvlst) #2D list,且都為字串,非數字
#以下雙層for迴圈,把字串都轉成數字
for r in range( len(csvlst) ):
for c in range( len(csvlst[r]) ):
csvlst[r][c] = eval( csvlst[r][c] )
for r in csvlst : print(f”{r.index(r[-1])}年現金流:”,r) #看起來沒問題,元素都是數字
for row in csvlst:
csvAry = np.array(row)
myirr = round(npf.irr(csvAry),4)
#round函數的問題,有的資料取小數點下4位失敗
# myirr = round(myirr,4)
year = row.index(row[-1])
myirrStr = str(myirr*100) + “%”
tup = (year,myirrStr)
year_IRR.append(tup)
for ele in year_IRR: print(ele)
with open(“IRR_Calculate.csv”,”w”) as f2:
csv.writer(f2).writerows(year_IRR)
print(“資料已寫入IRR_Calculate.csv\n若想了解IRR 5%的香港保單或\n永豐證複委託優惠或\nYTM超過5%的債券\n請在此表單留下聯絡資料\nhttps://forms.gle/6hPmWBUVyvS9GDxH9“)
a = input(“請輸入enter鍵離開”)
輸出結果:
自己輸入路徑與檔名:
C:\Python\example\csvreader\cashFlow.txt
以系統管理員身分
執行Anaconda Prompt
切換到py檔同路徑
pyinstaller -F SavingKingIRR_csv.py
轉為exe檔
執行結果:
SavingKingIRR_csv.exe為本檔案
需要自己寫好逗點分隔檔
支援首續期不同保費
以及一次計算多年期IRR
不用寫逗點分隔檔
但首續期保費需相同
一次只能算一個年期
修正round(,4)函數
取小數點下4位失敗的問題:
輸出結果:
22/11/3:
主要新增這一段:
if not os.path.exists(folder):
os.makedirs(folder)
os.makedirs(folder)
輸出結果:
22/11/4
新增解約金增加率
for i in range( len(csvlst) ):
if i == 0: increaseStr = “NA”
else :
increase = csvlst[i][-1]/csvlst[i-1][-1]-1
increaseStr = “%.2f %%” %(increase*100)
輸出結果:
近期留言