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

10/03/2021

製作gif動圖的2個方式:使用Python與Keynote

前陣子出於行銷需求,我想要自己製作gif動圖來吸引潛在客戶的目光。由於是實驗性質,也沒有預算可以花錢請人製作,於是就探索了一下DIY的可能性——用自己粗淺的Python知識湊出程式碼來用,很幸運有成功。後來呢,我又驚喜的發現,原來Mac電腦裡的Keynote軟體就可以用來製作「動畫式gif」(應該是我個人後知後覺吧~)以下就來介紹兩種製作gif動圖的方法。


使用imageio函式庫,製作gif動圖


我使用的是imageio這個函式庫,跑程式之前須先安裝它。我是在MacBook Pro裡面使用Python,所以進入終端機之後,以下列語法安裝:

pip install imageio


接下來,就是寫Python程式來完成任務。gif動圖生成的邏輯算是簡單的,首先要有至少2張圖片(我先把它們存在同一個檔案夾內,例如myfile檔案夾)。程式碼要做的,是把圖片名稱存入一個列表裡。接著利用imageio語法逐一讀取圖片,然後存為gif檔案格式。


import os

import imageio



#建立一個儲存檔案名稱的空列表

file_names = [ ]


#從存有圖片的檔案夾中,讀取圖片檔案名稱。然後要加上檔案夾路徑,然後存在列表中。

for file in os.listdir(path='./myfile'):

    if file[-5:] == '.jpeg':

        file_names.append('./myfile/' + file)


print(file_names)


#建立一個儲存圖片的空列表

images = []


#把一開始儲存檔案名稱的列表叫出,逐一存入圖片列表

for i in file_names:

    print(i)

    images.append(imageio.imread(i))


#存為gif動圖格式

imageio.mimsave('output.gif', images, fps=0.8)






目前我發現這組程式碼的缺點是,我無法指定圖片出現的順序。如果圖片出現的順序不是預期的,會有點傷腦筋。目前補救方式,只能重複多跑兩次程式,看看會不會出現一次是正確的順序這樣。



用Keynote製作動畫式gif


用Keynote軟體製作gif動圖,需要把圖片貼到Keynote的頁面上,再存為動畫式gif。


1. 開啟Keynote,新增檔案。點選右上角的「文件」,在右側清單下方設定「幻燈片大小」。寬和高依照需要而定,這裡先用350px的正方形製作。(雖然可設定更大,但儲存時最大為480px)




2. 把圖片一一貼到Keynote頁面上。如有需要,還可以利用這個軟體的編輯功能,在頁面上增加文字或圖案。編輯完成後,選擇「檔案」--「輸出至動畫式gif」。




3. 儲存之前,要設定好參數。這些參數可自己選擇、比較不同效果。要注意的是,內建的解析度只有480x480。如果你需要更高的解析度,那就無法使用這個方式製作動圖了。





這個就是Keynote生成的gif檔案。我還發現,用Keynote製作出的GIF檔案會比較大,例如這次製作,python的GIF圖vs.Keynote的GIF圖=146KB vs. 1.3MB。




9/22/2020

使用PyPDF2模塊抽取PDF部分頁面另存新檔 | Python筆記

最近試著整理有關PDF的Python程式,本文筆記的是,把已有的PDF檔案,取出一頁或多頁,另存一個PDF檔。以下就是完整的代碼附註釋。


#使用的是PyPDF2模塊

from PyPDF2 import PdfFileReader, PdfFileWriter


#可直接寫入PDF檔案名稱(須含副檔名),也可用input()取得

fileName = input('填入PDF档,须含副档名: ')

     

#實例化一個writer

pdf_writer = PdfFileWriter()


#開啟已有的PDF檔,並實例化一個reader

file_to_get = open(fileName, 'rb')

pdf_reader = PdfFileReader(file_to_get)


#看一下原檔的總頁數

NUM = pdf_reader.getNumPages()

print(NUM)


#開啟要存的新檔

newPDF = open('newPages.pdf', 'wb')


#這裡以input()收取要存的頁面。也可改成直接寫入數列

Pages = list()

k = 0

while k == 0:

    ent = int(input('Enter page number or enter -1 to quit:'))

    if ent >= 0:

        Pages.append(ent)

    else:

        k = k + 1


#檢查輸入的頁碼        

print(Pages)


#把指定的頁面逐頁加入writer,再寫入檔案

for pm in Pages:

    newpage = pdf_reader.getPage(pm)

    pdf_writer.addPage(newpage)

    pdf_writer.write(newPDF)


#記得關閉檔案!若沒有關閉檔案會出現錯誤,少一頁    

newPDF.close()


9/21/2020

與pip相關的指令 on Mac電腦 | Python筆記

pip 是用來安裝模塊(module)、管理模塊的程式。本文假設Mac電腦的Python3已經安裝完成,以下筆記的是pip的相關指令。以下寫在%後面的指令,代表在終端機狀態下(不需啟動python)。

% pip --version

據說pip在Python安裝後就附帶在裡面了,我們可以用這個指令查詢pip的版本號碼。


% pip list

% pip freeze

以上兩個指令都可以用來查詢已安裝的模塊有哪些,以及模塊的版本號碼。


但是,如果你的pip版本不是最新,pip list查詢的結果會順便提醒你現在有新版可以更新,並且提示更新pip的指令。例如以下這個:

% python3.8 -m pip install --upgrade pip

更新之後,再查詢一次pip版本,就可以看到版本號碼變了。



不過,用pip list或pip freeze雖然可以查詢模塊的版本號碼,卻無法得知哪些模塊不是最新版本。

% pip list --outdated

這個指令可以用來查詢哪些模塊已經過時(outdated)。



% pip install --upgrade modulename

遇到有過時的模塊,可以用這個更新的指令,升級到最新的版本。



安裝新的模塊


% pip install modulename

用這個指令來安裝新的模塊。


% pip list

同前,查看已安裝的模塊有哪些。


% pip show modulename

查詢某個模塊的詳細資料,包括版本號碼、模塊用途、相關網站、開發者、開發者電子郵箱、模塊儲存位置等。



% pip uninstall modulename

如果想要移除某個模塊,用這個指令來解除安裝。


9/20/2020

PDF轉檔為純文字格式:使用Adobe Reader或Python

想要把PDF格式的文件轉為別的格式,通常有點困難。一般習慣使用Microsoft OFFICE文書處理系統的人,知道可以把WORD文件、EXCEL文件轉換為PDF格式,但是OFFICE沒辦法幫你把PDF逆向轉回WORD文件或EXCEL文件。

PDF是Adobe公司所開發的一種文件格式,全名為Portable Document Format,所謂的portable可攜式,意思是這種文件格式可以跨越操作系統、應用程式的界線,不侷限使用單一特定的應用程式才能打開(相比之下,Word文件就是一定要用微軟的WORD應用程式打開,才能正常顯示)。

本文的主題則是,如何將PDF檔案轉換為純文字檔

最簡單直觀的方式,是用Adobe Reader這個應用程式。目前它是可以免費下載使用的。用Adobe Reader打開一個PDF文件後,點選「檔案」>>「另存為文字檔」,就可以了。(如果想要轉換為OFFICE裡面的Word、Excel或PowerPoint,則必須付費使用Adobe Acrobat Pro DC。它不只可以用來轉檔,還可以讓你編輯PDF文件。)

補充一點,如果想要知道PDF文件裡的文字是什麼編碼,可以在Adobe Reader內查看,點選「檔案」>>「內容」,再選擇「字型」的標籤頁,就可找到。


也可寫Python程式把PDF轉為純文字格式

接下來要討論的則是,用Python程式將PDF格式轉換為純文字,並另存新檔。目前為止我試過 pdfplumber 和 pypdf2 兩個模塊(module),兩者都有效果好的時候。


pdfplumber:

pdfplumber的特色是程式碼中不需要指明文字的編碼,而且它可以用來轉換中文內容的檔案。pdfplumber似乎是可以自己辨別文字編碼然後進行轉換。不過,可以想像,若PDF文件用的剛好是這個模塊不兼容的編碼,就沒辦法正確轉檔了!我自己試過的例子:現在比較罕見的ETenms-B5-H中文編碼,就沒辦法用pdfplumber轉換出來。


import pdfplumber  #引入模塊


file = 'filename.pdf'

pdfob = pdfplumber.open(file)  #用模塊開啟要轉換的PDF檔

pgnum = len(pdfob.pages)

textfile = open('new.txt', 'w')  #指定並開啟一個純文字檔


for pg in range(pgnum):  

    page = pdfob.pages[pg] #每次呼叫一頁

    text = page.extract_text() #擷取純文字       

    textfile.write(text) #寫入純文字檔

    

pdfob.close()

textfile.close()


pypdf2:

pypdf2這個模塊使用時可以註明文字編碼。編碼如果正確的話,有機會轉換出整齊排列的純文字。如前述,用Adobe Reader的應用程式,可以查出文件的編碼。有需要時也可查閱網上資料,找出正確的編碼名稱:https://docs.python.org/2.4/lib/standard-encodings.html


import PyPDF2 as pp2 #引入模塊


PDFfile = open('tobeconverted.pdf', 'rb') #開啟PDF檔,記得模式要寫rb

pdfreader = pp2.PdfFileReader(PDFfile) 

textfile = open('catcher.text', 'a')

print(pdfreader.getNumPages()) #取得PDF檔案的頁數

i = 0

while i < pdfreader.getNumPages():

    pageinfo = pdfreader.getPage(i)  #每次取出一頁

    Text = pageinfo.extractText() #提取純文字(下行為另一種寫法,可註明文字編碼)

    #Text = pageinfo.extractText().encode('latin1', errors='ignore').decode('utf-8', errors='ignore')

    textfile.writelines(Text) #寫入提取的純文字

    i = i + 1


PDFfile.close()

textfile.close()


寫Python程式來轉換PDF檔,好處就是不必特地下載任何軟體程式來轉檔。不過,由於文字編碼的類別實在太紛雜了,似乎還沒有一個包山包海什麼編碼都能解的萬能模塊可以用。

再補充一點,其實用來解析PDF檔案的Python模塊還有很多,但如果想處理的檔案含有中文內容,可以先用pdfplumber試試看,可能是最有效率的。而如果是轉換英文檔案,則pdfplumber和pypdf都很有機會成功(若能知道文字編碼為何,那麼pypdf2轉換出來的文字有可能更整齊有序,畢竟轉換出整齊的純文字,才方便後續的閱讀或是整理)。


9/04/2020

os, os.path模塊常用指令用法 | Python學習筆記

Python可以跨平台使用,在Linux、Windows、Mac的操作系統中都可安裝Python來使用,然而每種操作系統有各自不同的設定,os模塊可以幫助我們克服這些差異,遇到要操作系統中的檔案、目錄(文件夾)時,可以順暢無阻。

進入終端機後,啟動python(或python3),須先引入os模塊,才能執行以下指令。

>>>import os

>>>os.name
'posix'
指令會返回當前使用的操作系統名稱

>>>os.linesep
'\n'
指令會返回當前操作系統所使用的換行符號

>>os.sep
'/'
指令會返回當前操作系統的檔案路徑分隔符號

>>>os.pardir
'..'
指令會返回表示上一級目錄的符號

>>>os.curdir
'.'
指令會返回表示當前目錄的符號

-------------------------------------------

>>>os.getcwd()
'/Users/alice'
指令會返回目前所在的目錄名稱(含絕對路徑)

>>>os.listdir(path='.')
['dir1', 'dir2', 'dir3', 'Desktop', 'Applications']
指令會返回目前所在目錄裡的所有文件夾和文件的名稱,也可寫成os.listdir('.')或os.listdir()
>>>os.listdir(path='..')
指令會返回目前上一層目錄裡的所有文件夾和文件名稱,也可寫成os.listdir('..')
>>>os.chdir(path)
指令改變當前的目錄位置

>>>os.mkdir(path)
指令會新增一個文件夾(新增後不會返回任何東西)
path參數可以直接寫一個文件夾名稱,例如'dirname',或是path='dirname',代表在當前目錄裡新增文件夾。
path參數可以帶有路徑,例如'dirhere/dirname',或是path='dirhere/dirname',代表在dirhere目錄裡新增文件夾。

>>>os.path.isdir(path)
指令查詢path所指的目錄是否存在,結果返回True或False(不能查詢檔案名稱)
path參數的寫法同上

>>>os.path.isfile(path)
指令查詢path所指的檔案是否存在,結果返回True或False

>>>os.path.exists(path)
指令查詢path所指的目錄或檔案是否存在,結果返回True或False

>>>os.rename(src, dst)
指令將src改名為dst,可以改目錄或檔案的名稱

>>>os.rmdir(path)
指令移除path所指的目錄(不能用來移除檔案)

>>>os.remove(path)
指令移除path所指的檔案(不能用來移除文件夾)

-------------------------------------------

>>>os.system(command)
用來執行系統的指令

-------------------------------------------

>>>os.path.basename(path)
指令返回path參數的文件名稱(或目錄名稱),不帶路徑

>>>os.path.dirname(path)
指令返回path參數的路徑,不帶文件名稱

>>>os.path.split(path)
指令分割path參數為目錄(head)和檔案名稱(tail)兩部份
例如:os.path.split(os.getcwd()),返回('/Users', 'ellis')

>>>os.path.splitext(path)
指令分割path參數為目錄包括檔名(root),以及副檔名(ext)兩部份
例如:os.path.splitext(os.getcwd()),返回('/Users/ellis', '')

>>>os.path.join(dirpath, filename)
指令把路徑和檔名連結起來,中間自動加分割符號
例如:os.path.join(os.getcwd(), 'filename'),返回'/Users/ellis/filename'

4/10/2020

如何執行Python程式

執行程式一般都叫「跑程式」,也就是下了「指令」給電腦裡的應用程式之後,它會跑出結果來。其實,計算加減乘除的計算機,可以說就是最簡單的程式執行工具:按鍵輸入「1+1=」,運算的結果(2)就會立即出現在螢幕上。

Python也是下指令之後讓應用程式跑出結果來。基本上也是輸入1 + 1,並按「enter」鍵,就會得出結果(2)。不過,Python的功能當然不是只用來做數學運算,未來我們學習了各種程式碼之後,就能下更複雜的指令給Python去執行。在此,我們須先知道,指令要下在哪裡?

下指令給Python有兩種主要形式。第一種是下指令時,才逐字輸入指令(程式碼),這適合用在程式碼只有單行,簡單不複雜的情況下。第二種則是先把指令(程式碼)寫好存在一個副檔名為.py的純文字檔案中,這適合用在程式碼內容較多且較繁雜的情況下。

Mac作業系統中,如何對Python下單行指令?

點開「應用程式」檔案夾,找到「工具程式」中的「終端機」,點開後,在游標處輸入「Python3」,啟動Python 3程式,就可以在>>>的符號之後輸入指令。例如:

>>>print ('hello world!')
hello world!

>>>三個箭頭符號後面輸入的是指令。而下一行的hello world!則是指令執行的結果。

如果要從Python的程式環境中退出,請輸入「exit ()」。如果要從終端機的環境中退出,請輸入「exit」。

另一種下單行指令的方式是使用IDLE軟體。IDLE是隨附Python安裝時內建的應用軟體,點開IDLE之後會直接啟動Python。看起來跟終端機的形式很像,但是它有「智慧」,會自動用顏色標註不同的Python語法(syntax),稱為語法亮顯(syntax highlight),讓人容易識別。

IDLE軟體就放在Python 3.x的檔案夾中:進入「應用程式」,找到Python 3.x的檔案夾,裡面就有IDLE或IDLE.app的程式,點開它即可。


儲存程式碼的*.py檔案怎麼來?

要讓Python執行 *.py檔案中的指令,首先要準備好一個 *.py的檔案。檔案的副檔名必須是 .py,而且檔案中的內容必須是純文字UTF-8格式。由於一般常用的文字編輯器,如Word、記事本、備忘錄、文字編輯等,容易夾帶純文字以外的格式設定,會造成Python讀取出問題,因此最好是使用一個專門用來編輯與儲存程式碼的編輯器,方可一勞永逸。


***********************
網路上有一款免費的程式碼編輯器ATOM,適合用來撰寫、編輯和儲存程式碼。它的下載和安裝也不困難。

ATOM官網:https://atom.io/
For Mac OS X的下載方式:連上官網,下載檔案。把檔案拖曳到「應用程式」資料夾中。
ATOM的開啟方式:只要在「應用程式」點開ATOM檔案,就可以開啟ATOM來使用。開啟後,點開左上角的untitled頁籤,這裡就是輸入程式碼的地方。輸入或編輯之後,按照一般方式進行存檔。記得副檔名是py哦!
***********************


Mac作業系統中,如何讓Python執行 *.py檔案中的指令?

方法一:
開啟「終端機」,輸入「Python3」,啟動Python 3程式(此時可以看到游標出現在>>>符號之後)。鍵入「python」再加一個空格,然後把要執行的*.py檔案,拖曳到程式視窗中,並按「enter」鍵,程式就會執行。

方法二:
在IDLE軟體環境下跑程式,須從頂部選單去找到並開啟*.py檔案。再說一次,IDLE軟體的位置就在Python 3.x的檔案夾中。

從IDLE的頂部選單「File」中,點選「Open」來打開一個預先寫好的*.py檔案。接著再點擊頂部選單「Run」中的「Run Module」,就可以執行檔案中的程式碼。

IDLE軟體本身也提供編輯程式碼的功能,意思是可以編寫新的程式碼並存檔(步驟是:點開選單「File」中的「New File」,打開空白的頁面,輸入python指令,然後再選「File」中的「Save」存檔即可)。新的程式碼須先存檔後,才能Run Module執行。

了解了在電腦中執行Python程式的方式,接下來就開始學點程式碼吧!

4/09/2020

Python安裝流程 for Mac(MacOS)

想要學習Python程式語言,首先要設置可以執行這類程式的環境,也就是在自己的電腦裡下載軟體、安裝軟體、改變設定,以便後續的程式設計和執行可以很順暢。

Python的一個好處是,在Windows和Mac的電腦裡都可以安裝使用。(其實在Linux/UNIX也可以安裝,但我估計會使用這種系統的人不需要來閱讀本文。)由於我打算在Mac筆電中使用,所以我下載的是for MacOS的最新版本 Python 3.8.1(版本會持續更新,當你去下載時,有可能已經發佈了新版,只要直接選擇最新版本下載即可)。

就如同Windows和MacOS每隔一段時間會推出系統新版本,Python也會不斷更新,每隔一段時間就發布新版本。要注意的是,目前有Python 2.x和Python 3.x兩個系列。舊的系列都還有人在用,所以不可能馬上廢除。新舊系列會並行一段時間,但對於新進的學習者來說,可以直接選擇學習新版本,日後再留意新舊版本的差異即可。

MacOS作業系統已經內建Python 2.x

在MacOS作業系統中已經內建了Python 2.x,這件事我也是開始學了才知道!如果你想直接執行Python 2.x,請打開「應用程式」,在「工具程式」裡找到「終端機」並點開。

如果想要知道你Mac電腦裡的Python 2.x是哪一個版本,可在游標處輸入「python --version」,並按「enter」鍵,版本訊息就會顯示出來。(如下圖)


如果在游標處輸入「python」,並按「enter」鍵,就能夠開啟Python 2.x程式(如上圖)。(這裡看到新版的MacOS提示,Python 2.7雖然是內建的Python版本,但未來將會停用,建議使用者改用Python 3.x。)

Python程式的命令列開頭是「>>>」三個單箭頭。如果要離開(關閉)Python程式,在「>>>」之後輸入「exit ()」,並按「enter」鍵,這樣會回到終端機程式(如上圖)。
附帶說明,如果要離開(關閉)終端機程式,則是輸入「exit」,並按「enter」鍵(如上圖)。

MacOS作業系統中安裝Python 3.x

雖然MacOS推薦使用Python 3.x,但是似乎並沒有內建這個版本。

我進入終端機程式後,試著輸入「python3 --version」,得到的結果是找不到這個開發者工具(no developer tools were found)。並且跳出一個對話框,問我是否要立即安裝工具。既然如此,我就點選「安裝」吧!


點擊「安裝」後,跳出「命令列工具許可協議」,我看了一下,發現這個所謂的「開發者軟體」似乎包含了多個程式,但是它沒有寫明到底包含哪些程式,我只看到有提到QuickTime開發軟體,以及第三方軟體。雖然我很信任蘋果公司的產品,但是對我來說,目前並沒有需要下載多餘的工具程式。所以我決定不用這個方式下載安裝Python 3.x。點選「不同意」跳出。


自己從Python官網下載新版,安裝到Mac電腦,算是相當簡單快速。
先打開Python官網https://www.python.org/,找到「Download」(這裡看到最新版本是Python 3.8.1),點進去。


點開後的頁面是最新版Python 3.8.1的說明。拉到頁面最後一單元「Files」,找到Mac OS X的下載版本,點擊,出現對話框,點擊「允許」,就會開始下載檔案。



在Safari瀏覽器右上角可以找到「顯示下載項目」(圖標是一個箭頭朝下)。檔案下載完畢後,點開它,就會開始安裝流程。



經過一連串的確認、同意,以及輸入開機密碼後,安裝完畢,看到「已成功完成安裝」的字樣。



距離安裝完畢還有一步:如上圖,在「安裝Python」的完成對話框內,提示Python需要一組SSL root certificates。安裝的方式是在Python 3.8的檔案夾內,找到Install Certificates.command,點選雙擊之後,它會打開終端機程式,執行安裝,並自己結束程式。到此,安裝步驟已完成。


Python 3.8應用程式放在哪裡?點擊「Finder」圖標,從左邊的「喜好項目」中找到「應用程式」,Python 3.8的檔案夾就在裡面。

開啟Python 3.x

下載軟體一段時間之後,很容易就會忘記是哪一個版本。開啟「應用程式」—「工具程式」—「終端機」,輸入「python3 --version」,就可以顯示版本訊息。

如何開啟Python 3.x?與開啟Python 2.x的方法類似:開啟「應用程式」—「工具程式」—「終端機」,在游標輸入「Python3」,並按「enter」鍵。離開(關閉)程式的指令則是「exit ()」。