站內搜尋:Yahoo搜尋如果沒有給完整的網址,請在站內再搜尋一次!

2019-08-17

讓在Anaconda Navigator環境下安裝執行的Visual Studio Code增加PYQT Integration的擴充功能

  1. 在Visual Studio Code安裝PYQT Integration的擴充功能
  2. 安裝PYQT Integration擴充功能後,將會增加下列功能,或更多,例如:
    從VS code直接開啟 designer.exe 新增 ui form,在VS Code下預覽 ui form ...

    PYQT: New FormOpen designer
    PYQT: Edit In DesignerOpen designer with current ui form
    PYQT: PreviewPreview current ui form
    PYQT: Compile FormCompile ui form to path defined in "pyqt-integration.pyuic.compile.filepath"
    PYQT: Compile ResourceCompile qrc file to path defined in "pyqt-integration.pyrcc.compile.filepath"
    PYQT: Generate Translation File (.ts)Compile UI file (.py) to translation file with path defined in "pyqt-integration.pylupdate.compile.filepath"
    Compile .pro file
    PYQT: Open With Qt LinguistOpen with Qt Linguist for translation file (.ts)
  3. 如果從 VS Code,無法正常啟動 designer.exe 或 pyuic5 ...,可以透過擴充延伸模組設定,指定正確的路徑、檔名 ...
  4. 以Qtdesigner這個設定項目為例,designer.exe,通常都是放在,Anaconda3安裝目錄的\Lib\site-packages\pyqt5_tools\路徑下。
  5. 設定項目的參考資料:
    pyqt-integration.qtdesigner.pathPath of executable file of qt designer, the extension will ask you to set at the first time it runs, e.g. c:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python35\\Lib\\site-packages\\pyqt5-tools\\designer.exe
    pyqt-integration.pyuic.cmd"pyuic" command, default "pyuic5"
    pyqt-integration.pyuic.compile.filepathCompile file path, relative path as default, switch to absolute path by involving ${workspace}, e.g. ${workspace}\\UI\\Ui_${ui_name}.py
    pyqt-integration.pyuic.compile.addOptionsAdditional options for pyuic compiling, it can be a combination of '-x', '-d', '-i', etc.
    pyqt-integration.pyrcc.cmd"pyrcc" command, default "pyrcc5"
    pyqt-integration.pyrcc.compile.filepathCompile file path, relative path as default, switch to absolute path by involving ${workspace}, e.g. ${workspace}\\QRC\\${qrc_name}_rc.py
    pyqt-integration.pyrcc.compile.addOptionsAdditional options for pyrcc compiling, it can be a combination of '-root', '-threshold', '-compress', '-no-compress', etc.
    pyqt-integration.pylupdate.cmd"pylupdate" command, default "pylupdate5"
    pyqt-integration.pylupdate.compile.filepathOnly works when compiling an UI file (.py), Stores the target '.ts' file's path, relative path as default, switch to absolute path by involving ${workspace}, e.g. ${workspace}\\TS\\${ts_name}.ts
    pyqt-integration.pylupdate.compile.addOptionsAdditional options for pylupdate, it can be a combination of '-verbose', '-noobsolete', '-tr-function', '-translate-function', etc.
    pyqt-integration.linguist.cmd"linguist" command, default "linguist"

讓在Anaconda Navigator環境下安裝的 Visual Studio Code (VS code),以繁體中文的介面顯示

安裝Visual Studio Code (VS Code) 繁體中文語言包(Chinese (Traditional) Language Pack for Visual Studio Code)的步驟:
  1. 點擊「Extensions」→在Extensions marketplace的搜尋方塊內輸入:chinese language pack,選取「Chinese (Traditional) Language Pack for Visual Studio Code」,可以查看VS Code 的中文(繁體)語言套件的說明擊使用方式。
  2. 點擊「Install」,安裝後會提示:重新開啟VS Code
  3. 重新啟動後,就會以繁體中文的語言界面顯示。如果沒有以中文顯示,可以參考以下的使用方式說明:
    安裝了之後,在 locale.json 裡面設定 "locale": "zh-tw" 即可載入中文(繁體)的語言套件。要修改locale.json,可以按下Ctrl+Shift+P來呼叫 命令選擇區,輸入 "config" 以從其他可用命令裡面篩選出 Configure Language 命令。

2019-08-15

Python 3 : SQLite3的存取基本步驟,及異常錯誤處理 (try ... except ... )

  1. 參考資料:
  2. 在Python 3 環境下,使用SQLilte3,對資料庫操作的基本步驟(一般原則):
    1. 用sqlite3.connect("資料庫檔名.副檔名") 建立資料庫連線,並將這個連線物件指定給一個連線物件變數,例如:oConn=sqlite3.connect("資料庫檔名.副檔名")
    2. 建立連線物件的cursor物件,例如:cTest=oConn.cursor()  
    3. 執行SQL命令,將結果以tuple資料組存放在cursor物件內。例如:cTest.execute("SQL命令")  
    4. 取得目標資料集,例如:oTest=cTest.fetchall()  
    5. 處理取得的資料集,例如:for aTest in oTest :
    6. 關閉資料庫連線,例如:oConn.close()  
  3. 對於不需要return回傳執行結果的資料庫操作,可以簡化操作步驟,如下:
    1. 建立資料庫連線,例如:oConn=sqlite3.connect("資料庫檔名.副檔名")
    2. 執行SQL命令,例如:oConn.execute("SQL命令")  
    3. 更新資料庫,例如:oConn.commite()  
  4. cursor物件是一個指標物件,cursor物件執行SQL命令後,會將結果存放在cursor物件內,並可透過fetchone, fetchmany, fetchall ... 等方法或函數來操作cursor物件內的資料。
    一個資料庫連線的使用過程,可以根據目的需求的不同,建立多個cursor物件來使用,不同名稱的cursor物件,如果不再使用可給予關閉close()。同一個cursor物件,可以透過不同的命令執行,賦予不同的資料內容。
    使用VS code 可以快速瀏覽sqlite3 cursor可以使用的方法、屬性...
  5. 可以使用 VS Code,查看Python 有哪些處理 SQLite 錯誤例外異常的類別,例如;Error, DatabaseErrot, DataError, ProgrammingError ...,在不分開測試錯誤類別來源的情況下,可以使用預設的異常錯誤例外處理 Exception ...
    import sqlite3
    oConn=sqlite3.connect("test.db")
    zSQL="UPDATE T SET T2='5',T3='8' WHERE T1='1' "
    try:
        oConn.execute(zSQL)
    except sqlite3.DataError as d:
        print("d=",d)
    except sqlite3.DatabaseError as de:
        print("de=",de)
    except sqlite3.Error as e:
        print("e=",e)
    except Exception as ex:
        print("ex=",ex)
    oConn.commit()

    #de= database is locked

  6. 適度地在SQLite的CRUD操作上使用try ... except ...,可以確保程式持續執行,或在執行過程排除異常、錯誤...。

2019-08-13

Python 3 : 使用 urllib.request.retrieve 下載檔案

import datetime as dt
import urllib.request
zToday=dt.datetime.now().strftime('%Y%m%d')
##上市公司基本資料
zUrlToRetrieve="http://mopsfin.twse.com.tw/opendata/t187ap03_L.csv"
zSaveFileAtPath=".\\t187ap03_L_%s.csv"%(zToday)
urllib.request.urlretrieve(url=zUrlToRetrieve, filename=zSaveFileAtPath)
##上櫃公司基本資料
zUrlToRetrieve="http://mopsfin.twse.com.tw/opendata/t187ap03_O.csv"
zSaveFileAtPath=".\\t187ap03_O_%s.csv"%(zToday)
urllib.request.urlretrieve(zUrlToRetrieve, zSaveFileAtPath)

##下載後,遇有存檔相同檔名的檔案,會覆蓋較舊的檔案

Python 3 : urllib.request 存取網頁的內建標準模組 (URL handling modules) / urllib.error try ... except ... else 異常錯誤處理

  1. 官方參考文件:
  2. urllib包含處理網路請求和操作URL的五個子模組:
    • urllib.error : 包含由urllib.request所丟出的異常、錯誤
    • urllib.parse : 解析URL
    • urllib.request :  開啟及讀取URL的內容
    • urllib.response : 
    • urllib.robotparse : 用來解析robots.txt
  3. urllib.request模組,網頁內容請求及回應內容讀取的程式碼範例:zTimeStamp=str(dt.datetime.now().timestamp()*1000)[:13]
    zURLtoGetStockInfo="https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=%s&json=1&delay=0&_=%s"
    zURLtoGetStockInfo=zURLtoGetStockInfo%('tse_1440.tw',zTimeStamp)
    ##(1)建立請求並開啟網頁
    oResp=urllib.request.urlopen(zURLtoGetStockInfo)
    ##(2)取得網頁回應的內容
    oHTML=oResp.read()
    ##(3)從網頁回應內容中載入JSON內容
    oJSON=json.loads(oHTML)
    print(oJSON)
    ##等同上面(1)請求、(2)回應、(3)載入三段程序
    oJSON=json.loads(urllib.request.urlopen(zURLtoGetStockInfo).read())
    print(oJSON)
  4. 利用try ... except ... 取得讀取網頁內容失敗的訊息:
    try:
        oJSON=json.loads(urllib.request.urlopen(zURLtoGetStockInfo).read())
        print(oJSON)
    #except Exception as e:
    #urllib.error.URLError : 有reason,無code
    #except urllib.error.URLError as e:
    #urllib.error.HTTPError : 有code,reason,headers
    except urllib.error.HTTPError as e:
        print("ErrorCode=", e.code)
        print("ErrorReason=", e.reason)
        print("ErrorDescription=", e)
  5.     oJSON={'rtcode':'error404'}

    if oJSON['rtcode']=='error404':
        print("請求網頁內容失敗或發生錯誤!!!")
    else:
        print("請求網頁內容成功!!!")

    # ErrorCode= 404
    # ErrorReason= Not Found
    # ErrorDescription= HTTP Error 404: Not Found
    # 請求網頁內容失敗或發生錯誤!!!

Python : 把串列(List)元素,串接成字串


  1. 使用join進行串接
  2. 如有非字串型別的元素,需轉換為字串型別
  3. 程式碼範例:
    aList=['a','b','c','d']
    print("^".join(aList))          ###a^b^c^d
    aNum=[1,2,3,4,5,6]           ###目標:1+2+3+4+5+6
    zNum=[]
    for i in aNum: zNum.append(str(i))
    print(zNum)                      ###['1', '2', '3', '4', '5', '6']
    print("+".join(zNum))      ###1+2+3+4+5+6