Python / 檔案目錄處理 (windows system)

Python / 檔案目錄處理 (windows system)

目錄 取得程式執行目錄 (current directory) 取得檔案大小 (Filesize) 確認檔案或目錄是否存在 刪除目錄下所有檔案 ▍取得程式執行目錄 (current working directory) ▍取得檔案大小 (Fileszie) 取得檔案大小的方法有三種,回傳的結果是位元組 (bytes) 使用 os.path.getsize(path) 使用 os.stat(path).st_size 使用 Path(path).stat().st_size (Python 3.4+) Reference Getting file size in Python? | stack overflow ▍確認檔案或目錄是否存在 在 os 套件中有三種相關的方法可以確認檔案或目錄是否存在: os.path.exists() 檢查檔案目錄是否存在 os.path.isfile() 確認路徑是否為檔案 os.path.isdir() 確認路徑是否為路徑 另外,在 Python 3.4 以上的版本可以使用 pathlibPath 套件: Reference Python Check If File...

Python / 使用 Selenium 撰寫網路爬蟲程式 (chromedriver)

Python / 使用 Selenium 撰寫網路爬蟲程式 (chromedriver)

想要用 Python 實作網路爬蟲程式的方法有兩種:使用 requests 套件或 selenium 套件。兩個套件的差異在於 requests 套件是使用最基礎的 GET 和 POST 方法和 server 溝通,好處在於它的速度快、作法單純,壞處是必須處裡來自於網站的一切資料傳輸動作、Cookies Handling、甚至更複雜的 JS 渲染、網頁程式互動等複雜的動作。如果要爬的目標網站內容比較單純,或甚至可以透過 API 取的資料,那可以考慮使用 requests 套件。不過現在的網站設計越來越複雜,本篇使用的 selenium 套件則是透過控制瀏覽器 (本篇使用 chromedriver),讓瀏覽器為我們處裡上面提到的複雜動作,例如登入帳號之後的 cookies handling、表單填寫並送出 POST request 或是 JS 渲染後的網站動作,讓我們模擬實際操作網站的方式進行網站爬蟲。本篇目前不是完整的爬蟲程式教學,只是筆記一些關於使用 Selenium 套件撰寫爬蟲程式的方法。 目錄 如何取得 HTML 的 attribute (how to get attribute of element) 實作捲動畫面 (Scrolling) ▍如何取得 HTML 的 attribute (how to...

Python / 如何在建立 SQLite 資料庫並在 python 中執行 SQL Script

Python / 如何在建立 SQLite 資料庫並在 python 中執行 SQL Script

SQLite 雖然是一個資料庫,但它並非是一個完整的資料庫伺服器,它是以 C 語言為基礎並根據 SQL 標準開發出來的小型資料庫檔案格式,是一個開放原始碼的語言。SQLite 現在幾乎已經內建在許多跨平台的裝置上,而 sqlite3 是 Python 內建的套件,可以用以存取、執行 SQLite資料庫檔案。 ▍安裝 DB Browser ▍在 Python 上連線 SQLite 資料庫並執行 SQL Script sqlite3 是 Python 的內建套件,可以直接 import 取用。使用時先以 connect() 建立資料庫連線,並建立 cursor() 物件以呼叫 execute() 執行 SQL Script。最終記得 commit() 儲存上面執行的任何修改,並以 close() 關閉資料庫連線。 ▍讀取 SELECT 結果 使用 execute() 執行 SELECT 語法會以 tuple 串列的格式回傳資料 在官方的文件中的範例: ▍建立 temp table...

SQLite / 語法筆記

SQLite / 語法筆記

目錄 如何在 SQLite 實現 Truncate Table SQLite 的時間與日期函數 取得當下時間(在地時區) 建立 temp table ▍如何在 SQLite 實現 Truncate Table TRUNCATE 指令在 SQL Server 中是清除整張 table 的所有 records,但不會刪除整張表單也不會移除 table schema。SQLite 不是使用 TRUNCATE,而是使用 DELETE 這個指令。 Reference SQLite: TRUNCATE TABLE Statement | totn SQLite ▍SQLite 的時間與日期函數 在 SQLite 中有五個關於時間和日期的函數: date(time-value, ...) : The date() function returns the date in this...

Python / 如何處裡亞洲文字(Unicode, UTF-8)?以兩個字元計算顯示長度?轉換字串與bytes?

Python / 如何處裡亞洲文字(Unicode, UTF-8)?以兩個字元計算顯示長度?轉換字串與bytes?

目錄 將 utf-8 字串轉換為 bytes 格式,並計算 bytes 長度 ▍將 utf-8 字串轉換為 bytes 格式,並計算 bytes 長度 使用 encode() 函數可將字串轉換為 bytes 格式,若將 bytes 印出來可以看到字串最前面是以 b'' 開頭顯示表示此為 bytes array。其中可見原本標準的 ASCII 字元能然維持一個 byte 長度,而且直接顯示字元。如果是 Unicode 文字則是用 \x 16進位的方式表示,且以中文字為例在 UTF-8 編碼下是 3 個 bytes 長度。例如:”串”的 Unicode 編碼為 \xe4\xb8\xb2。 若要取得字串的 bytes 總長度,在轉換成 bytes 格式之後可以直接使用 len() 函數取得長度。 Reference How can I...

Mac / Python使用Selenium爬蟲無法開啟chromedriver

Mac / Python使用Selenium爬蟲無法開啟chromedriver

最近更新MacOS之後發現正在開發的Python爬蟲程式無法啟動chromedriver了,系統出現了下面這段警告訊息: “chromedriver” cannot be opened because it is from an unidentified developer.macOS cannot verify that this app is free from malware. 中文的介面應該會顯示: 無法打開「chromedriver」,因為它來自未識別的開發者。macOS無法驗證此App未包含惡意軟體。 稍微Google一下發現好像很多人都有遇到類似的狀況,大概都是因為新版的MacOS對安全性的要求變得更高,導致許多沒有被認證的程式預設都被禁止執行,有些從網路上下載的程式也有可能遇到這種狀況。 解決的辦法有兩種: ▍取消程式的隔離註記(quarantine flag) 執行步驟: 開啟終端機(terminal) 移動到該程式的目錄下,如我的chromedriver放在下面的目錄下 執行下列任一個指令 xattr 編輯檔案目錄的附加屬性這個系統指令可以編輯檔案目錄的附加屬性,例如系統目錄屬性(com.apple.FinderInfo)或是這邊要講的隔離屬性(com.apple.quarantine)。xattr指令的語法是:xattr <options> attributes <name of application>在chromedirver所在的目錄下,執行xattr指令使用 -d 移除chromedriver的隔離屬性(com.apple.quarantine): spctl 編輯程式的安全性權限標記通常不會是這個原因造成chromedriver無法開啟,不過偶爾還是會遇到類似的狀況。出於安全性的理由,對於一些無法辨識來源的程式系統可能會禁止執行,使用spctl指令可以開啟”任何來源“的程式執行權限。spctl指令的語法是:spctl <option> <assessment label> <label name> <name of application> ▍使用開發者工作(Developer Tools) 第二種方法是使用開發者工作(Developers Tools)。如果你有安裝X-Code的話,可以將chromediver加入系統的開發者工具清單中,開發者工具會忽略隔離標記(qurantine...

SQL Server / 如何取得資料庫列表

SQL Server / 如何取得資料庫列表

想知道目前的 SQL Server 上的所有資料庫列表,可以用 SQL 指令的方式列出資料庫名稱與細節,也可以在 SQL Server Management Studio 上直接點選。 ▍方法一:SQL Query 指令 在 SQL Server 上有一個 master 的系統資料庫,裡面記錄所有關於系統層級的相關資訊,關於 master 資料庫的詳細資訊可以參考微軟的 document:master 資料庫 – SQL Server | Microsoft Docs。其中 dbo.sysdatabases 這張 table 就儲存了每個資料庫的訊息。 執行以下指令: 其中 name 欄位就是目前 SQL Server 上的所有資料庫名稱,後面還有關於資料庫儲存的位置等等訊息。 ▍方法二:直接點選 SQL Server Management Studio 的樹狀圖 如果你的資料庫並不多,或是你是一個害怕使用程式碼的人,沒有將大量資料庫名稱輸出的需求,也許你可以直接點開資料庫的樹狀圖。 在 SSMS 左側的 Object Explorer 中點開...

Win / 如何解除 Outlook禁止存取下列可能不安全的附件

Win / 如何解除 Outlook禁止存取下列可能不安全的附件

我平常工作的時候經常需要透過 E-mail 傳檔案,除了 Excel、Word 檔之外還有很多的壓縮檔、程式碼等。先不說被自己公司 Mail Server 擋下來的郵件,有時候有些附件是被 Outlook 自動隱藏起來。例如上次當我請別人寄送一個 .py 的 python 檔過來,附件檔案就這麼消失了,而信件上方會顯示這麼一條警告:「 Outlook禁止存取下列可能不安全的附件」。 其實這個檔案並沒有被 mail server 檔下,它只是被 Outlook 視為可疑檔案隱藏起來。要解開的方式非常簡單,只需要修改登錄檔機碼即可。步驟如下: 1. 進入登錄檔編輯器 點擊 Win + R 快速鍵,或是從開始列找到「執行」→ 輸入「 regedit 」進入登錄檔編輯器 2. 開啟 Outlook 設定 進入以下路徑,根據不同的 Outlook 版本可能版本號碼會有差 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security 3. 將不想被隱藏的檔案格式加入機碼 在 Security 中加入 Level1Remove 字串值 → 並在數值資料中填入不想被移除的檔案格式副檔名,多個副檔名以分號區隔,如 .py;.exe。 再重新打開就看得到剛剛被隱藏的檔案啦~ Photo by Markus Spiske on Unsplash

[MySQL] 如何開啟遠端連線的權限,允許遠端裝置連線資料庫

[MySQL] 如何開啟遠端連線的權限,允許遠端裝置連線資料庫

因為安全性的考量,MySQL 預設是不允許遠端裝置連線本地端的資料庫。的確,允許其他裝置直接對資料庫進行存取的風險極高,不過有時侯我們總是需要遠端控制我們的資料庫,像是進行測試、初期的建置、伺服器間的相互連線、使用 user 端圖形化介面存取資料庫等。 允許遠端連線:開啟連接埠、建立使用者並允許權限 1. 開啟 Port 3306 MySQL 預設的 Port 是 3306,必須先開啟伺服器的連接埠,並確認防火牆的設定。尤其如果是建立在 GCP、AWS等雲端伺服器上,也要同時確認專案的防火牆設定。 2. 建立使用者 我們必須盡量避免使用 root 帳號,可以的話,建立一個新的使用者用來遠端存取資料庫。先以 root 帳號進入 MySQL 的 Console: 建立使用者名稱及密碼: 除了使用者名稱及密碼,這裡必需指定使用者的主機位置。過去的 MySQL 可以開啟全域的遠端連線權限,也就是允許任何的 IP 來源存取資料庫,在 MySQL 3 之後似乎已經不被允許這樣的設定。 參數如上方指令:建立一個使用者 user、密碼為 PASSWORD,位在本地端 localhost。若要建立遠端連線,就必須將 localhost 替換成遠端主機的 IP 位置。 例如我想用家裡的電腦連上資料庫,那就必須建立一個使用者並把家裡電腦的 IP 位置指定給 user,因為除了此一 IP 位置來源,資料庫一律會拒絕存取。 3. 給定使用者存取權限 指定位於 localhost 的使用者 user...