顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

2020年5月24日 星期日

[Python,Sikuli]如何將 Excel 內含有中文的資料轉存為 CSV 檔後讀入程式內使用

如何用 Sikuli 來將重複性的工作自動化,讓省下來的時間從事更有生產力的工作並提升生活品質。 中有介紹到 Sikuli 主要是遵循 Python 2.7 (Jyhton) 語法,故在讀入,由Excel轉出內含中文的資料讀入程式時,也會遇到 Python 2.7 所遇到的問題,這問題可分為以下兩個部分:

CSV 檔格式的問題

由 Excel 轉出的 csv 檔並不能夠直接使用,必需要先用 notepad++ 之類的程式,將 csv 檔轉為 UTF-8碼格式,就如同下圖所示,在 notepad++ 開啟 csv 檔,選擇[轉換]->[轉換至UTF-8碼格式]後,在將 csv 檔存檔。


讀取 CSV 檔

在 Python 2.7 中是用提供讀取 csv 檔用的套件,套件名稱就叫 csv,但在讀取中文的有問題,如同以下範例所示:


如要讀取內含中文的 csv 檔, 必需用codecs套件所提供的open方法,來指定打開的文件的語言編碼,它會在讀取的時候自動轉換為內部unicode,避免前述問題,但 codecs 套件讀入的格式,不是如 csv 套件一般,已經轉換好的 list 格式,需自行處理,不過相當簡單,只要用 split 函式,以換行符號(\n)為關鍵字,即可轉換為 list,如下列範例所示。

import codecs;
data = open("c:\\jython2.7.1\\test2.csv").read();
#判斷是否被轉含有 BOM UTF-8 格式,如果是將 BOM 去除
if data[:3] == codecs.BOM_UTF8:  
    data = data[3:];
#用換行符號(\n)將每行資料分開
splitdata=data.split('\n');
for i in splitdata:
   print(i);

執行結果如下圖:


結語

當我們有大量資料要輸入網頁或特定程式,而不想要用人工一筆一筆鍵入時,我們可用 sikuli 讀入 csv  檔,將資料一筆一筆輸入網頁或特定程式,而如果資料含有中文時,在讀入 csv 檔時,就要採用上述的處理方式,而無法直接套用內建csv 套件,如有需求的朋友,可參考使用。

2020年5月13日 星期三

[Python,Sikuli] 如何定時執行程式,來將每日例行工作自動化。

很多時侯我們會希望能夠定時執行某些作業,例如:每日定時上網捉取某些資料、定時關機等,透過將例行工作自動化來節省自已的時間,只要這些作業是固定的,就可以使用 Sikuli 來幫助我們進行自動化的作業。在如何用 Sikuli 來將重複性的工作自動化,讓省下來的時間從事更有生產力的工作並提升生活品質。 這篇文章中,我們提到 Sikuli 基本上是根基於 Python (Jython) 的語法,故想要定時執行某一任務,可參照 Python 上的函式,實現的方式有以下兩種 :

使用 threading 模組中的 Timer


Python 的 threading 模組,是 Python 標準函式庫裡面的模組,所以不用特別安裝即可使用,雖然功能不是很多,但是基本多執行緒程式設計常用的功能它都有,在這我們會用到該模組的 Timer , Timer 是一個執行緒,它可以在我們指定的時間間隔之後執行一個函式。

最簡單使用 Timer,基本上必需具備下列語法: 
  
import threading ;
timer = threading.Timer(timer_start_time, func , func_param);
timer.start();

其中使用 threading .Timer 建立執行緒時,至少需傳入2個參數,第一個參數 timer_start_time為,預計於多久後執行的時間間隔(單位是秒),第二個參數 func 為所要呼叫的函式名,第三個參數 func_param 是呼叫函式的引數(tuple),如果所呼叫的函式沒引數的話可省略。
 
前面提到 Timer 建立執行緒時,所要傳入的第一個參數,為預計於多久後執行的時間間隔,但我們想要的是指定時間執行,這時就需要將指定時間換算為時間間隔,這時可用 datetime 模組進行計算轉算,語法如下:

import datetime;
#取得現在時間
now_time = datetime.datetime.now();
#設定預計執行的時間
next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+str(next_time), "%Y-%m-%d %H:%M:%S");
#計算預定執行的時間與現在的時間間隔,並換算為秒數。
timer_start_time = (next_time - now_time).total_seconds(); 

  以下為示範每日定時關機的程式碼:



使用 sched 模組


sched 模組是 Python 內建的模組,它是一個排程(延時處理機制),每次想要定時執行某任務都必須寫入一個排程,其執行為依序執行,基本上必需具備下列語法: 

import sched;
from datetime import datetime;
import time; 
#初始化 schedule
schedule = sched.scheduler(time.time, time.sleep)
#設定 schedule 及執行
schedule.enter(timer_start_time, 0, func,())
schedule.run();
 
相較於 threading 模組中的 Timer,其步驟多了一步初始化的動作,其設定一樣是預計執行時間的間隔,但其 enter 內的參數不能省略,所以所于呼叫的函式就 算沒有引數,也要給一個空tuple (),同樣示範每日定時關機的程式碼如下:
 
 
可以看到基本上概念跟前一個是差不多的,只不過是應用不同模組來執行。

結語 


對於每日固定執行的工作,我們可以透過 Sikuli 來定時執行 ,將例行工作自動化,將節省下來的時間應用在更有生產力的工作。
 
 

2020年4月20日 星期一

[Python,Sikuli] 如何得到今日的日期及現在的時間

Sikuli 適用 Python 2.7 語法,故針對日期及時間的使用上,可以直接套用 Python提供的套件,基本上常用的有 time 及 datetime 兩個套件,在使用前要先引入。

import datetime,time;
在本次個人使用的情境,是想找出今日的日期的月、日、時間,還有星期幾, 好做後面的處理,可用以下語法得到:
nowtime=datetime.datetime.now();
print "Now:",nowtime;
print "Year:",nowtime.year;
print "Month:",nowtime.month;
print "Day:",nowtime.day;
print "Hour:",nowtime.hour;
print "Minute:",nowtime.minute;
print "Second:",nowtime.second;
print "Weekday:",nowtime.weekday();
print "Weekday:",nowtime.isoweekday();
print "Weekday:",nowtime.strftime("%A");

執行的結果如下:
Now: 2020-04-20 04:54:41.251945
Year: 2020
Month: 4
Day: 20
Hour: 4
Minute: 54
Second: 41
Weekday: 0
Weekday: 1
Weekday: Monday
這裡可以看到星期,如果用 isoweekday 呼叫,星期一會顯示為1 ,如用 weekday 星期一會顯示為 0,也可以用 sttftime 格式化輸出 Monday。如想看線上執行結果可參考下面連結:

請點我


2020年2月9日 星期日

在手機編寫 Python

過去曾寫過如何在手機上執行Pyhton, 當時還非常的麻煩地需要做很多的設定, 而且要自己下載APK程式安裝,而不是在Google Play下載。 現在不需要這麼麻煩了, 在Google Play 中下載來自俄羅斯 IIEC 開發的 Pydroid3 或 Pydroid2  APP , 打開 APP 後直接就可以編輯,編輯完後想執行只要按下方圓黃底白色的箭頭鍵即可。
下面就是簡單示範列印 Hello 字串執行輸出畫面的結果。




該 APP 也提供其他功能,在主畫面的左上角三槓符號,點下去會出現選單畫面,其中 Share 功能可將編輯好的程式碼,分享給手機內其他 APP。


另也可以用 Pastebin 功能,來分享程式碼,選擇此功能後會產生一個網路連結,可將此連結傳給他人,或傳至電腦上開啟,於  Pastebin 複製程式碼。


導入函式庫的的功能,則選擇 Pip,進入後有四個選項,LIBRARIES 顯示 APP 目前已安裝的函式庫,安裝程式庫前要另外安裝 Python repository plugin ,不過不用擔心 APP 會引導安裝。


也可以用 SEARCH LIBRARIES 來搜尋函式庫的方式,來找尋所要的函式庫,在此示範尋找和 sqlitedb 相關函式庫。


如果已經明確知道函式庫名稱,也可以直接在 INSTALL 輸入函式庫名稱安裝。


QUICK INSTALL 會顯示 APP 預設可安裝的函式庫,不過有些函式庫必需付費方可使用(如 tensorflow、opencv-python)
除此之外,也有 Interpreter 及 terminal ,一般編輯器該有的功能基本上都有了,另 Settings 內還有很多功能設定可使用,可依使用者需要設定。IIEC 除了 Pydroid 外也有 Java 、 Cxx 編輯器,有興趣的朋友可以試一試。


[Excel]如何創建自定義函數

在 Excel 內建函式中找不到自已想要的函式怎麼辦?事實上我們可以自已建一個,以下是一個簡單的Excel自定義函數示例,用於將民國年轉為西元: Function 民國轉西元(x As Double) As Double     民國轉西元 = x + 1911 End Func...