Categories: 攝影或3C

Python如何讀取csv檔? csv.reader(f) , 如何計算IRR? numpy_financial.irr() 免費下載IRR計算機,如何寫入csv檔? csv.writer(f).writerows(2D List) ; if not os.path.exists(folder): os.makedirs(folder)

欲使用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)
輸出結果:
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)
輸出結果:
儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡