3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
延續上一篇, [Python]上傳List資料到google試算表 這次是要將股票的買賣資料直接上傳到自己交易記錄的google試算表, 省的一個一個key。   PDF的解密並產出無密碼的pdf程式網路上已經找的到, 請參考Python--PyPDF3解密解析PDF文件(解密加密的PDF代码) 其他完整的程式碼請參考以下。 之後email收到券商的對帳單就將他放到下載項目, 開啟這個程式就全部上傳了, 橘色的部份再自行修改。 import os import tabula import re import csv from tabula import read_pdf from PyPDF2 import PdfFileReader from PyPDF2 import PdfFileWriter import gspread from google.oauth2.service_account import Credentials #google sheet授權 scopes = ['https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/drive'] credentials = Credentials.from_service_account_file('google金鑰',scopes=scopes) gc = gspread.authorize(credentials) spreadsheet_key='google ID' sheet=gc.open_by_key(spreadsheet_key).worksheet("交易") #寫入名稱為交易的sheet #生成無密碼pdf def get_reader(filename, password):     try:         old_file = open(filename, 'rb')         print('檔案開啟成功')     except Exception as err:         print('檔案開啟失敗!' + str(err))         return None     # 建立讀例項     pdf_reader = PdfFileReader(old_file, strict=False)     # 解密操作     if pdf_reader.isEncrypted:         if password is None:             print('%s檔案被加密,需要密碼!' % filename)             return None         else:             if pdf_reader.decrypt(password) != 1:                 print('%s密碼不正確!' % filename)                 return None     if old_file in locals():         old_file.close()     return pdf_reader def decrypt_pdf(filename, password, decrypted_filename=None):     """     將加密的檔案及逆行解密,並生成一個無需密碼pdf檔案     :param filename: 原先加密的pdf檔案     :param password: 對應的密碼     :param decrypted_filename: 解密之後的檔名     :return:     """     # 生成一個Reader和Writer     pdf_reader = get_reader(filename, password)     if pdf_reader is None:         return     if not pdf_reader.isEncrypted:         print('檔案沒有被加密,無需操作!')         return     pdf_writer = PdfFileWriter()     pdf_writer.appendPagesFromReader(pdf_reader)     if decrypted_filename is None:         decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + 'decrypted' + '.pdf'     # 寫入新檔案     pdf_writer.write(open(decrypted_filename, 'wb'))     #PDF轉成transaction.csv存放在MAC下載資料夾     tabula.convert_into(decrypted_filename, '/Users/PercyChang/Downloads/transaction.csv', output_format ='csv', pages='all') #移除csv字串裡的 "," def tranint(tran):     tran=tran.replace(',','')     return tran #讀取pdf檔案名稱符合 [\W]M12xxxxx[0-9A-Z]+ for path in os.listdir(r'/Users/PercyChang/Downloads/'):     pdfpath=re.findall('[\W]M12xxxxx[0-9A-Z]+',path)     if pdfpath != []:         break          #生成無密碼pdf decrypt_pdf(r'/Users/PercyChang/Downloads/'+pdfpath[0]+'.pdf', 'pdf密碼')   #打開transaction.csv並讀取每一個row t=open('/Users/PercyChang/Downloads/transaction.csv','r') 交易內容=csv.reader(t)   #CSV內容整理並存放到upload[] upload=[] for row in 交易內容:     #pdf名稱取代自行記錄的名稱     row[0]=row[0].replace('富邦公司治','00692富邦公司治理')     row[0]=row[0].replace('富邦美債2','00696B富邦美債20年')     try:         if row[1]=='集買':             row[1]=int(tranint(row[2]))          else:             row[1]=int(tranint(row[2]))*-1     except:         #買賣股數改為數字         row[1]=tranint(row[1].replace('集買',''))         row[1]=tranint(row[1].replace('集賣  ','-'))         row[1]=int(tranint(row[1]))     #刪除空白欄     del row[2]         #股價改成數字     row[2]=float(row[2])     #買入金額改成數字     row[3]=int(tranint(row[3]))     #手續費+交易稅     if row[5]!='':         row[4]=int(row[4])+int(row[5])     else:         row[4]=int(row[4])     #總投入金額改成數字     if row[6]!='':             row[6]=int(tranint(row[6]))     else:         row[6]=int(tranint(row[7]))*-1     del row[5]     del row[6]     #分拆時間與標的物     if row[0].startswith('109') is True:         upload=row[0].split()         upload.extend(row[1:])      else:         del upload[1:]         upload.extend(row[0:])     print(upload)     #upload上傳google sheet     sheet.append_row(upload) #刪除所有檔案 try:     os.remove(r'/Users/PercyChang/Downloads/'+pdfpath[0]+'.pdf')     os.remove(r'/Users/PercyChang/Downloads/'+pdfpath[0]+ '_' + 'decrypted' + '.pdf')     os.remove(r'/Users/PercyChang/Downloads/transaction.csv') except OSError as e:     print(e) else:     print("檔案上傳並刪除成功")   參考書籍:Python程式設計入門:金融商管實務案例(第三版) (電子書) 這本書主要我拿來查詢pthon資料的語法,對python一些字串、陣列的提取、計算、整理,檔案處理,物件導向設計等等都寫的蠻清晰的,是本python語法的入門書。 與蟲鳥和鳴的田間歲月

本文由percy10442pixnetnetblog提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦