Python創建可以打開文件的EXE

2021-02-13 Python愛好者社區

作者:數據取經團——王智博

數據取經團(公眾號:zlx19930503)

專注R、Python數據分析挖掘、可視化、機器學習

首先拋出一個要解決的問題,在學python時用jupyter notebook記了很多筆記,而實際操作時有一些細節不記得了,需要查看筆記。但是一個.ipynb文件用文本編輯器打開,多了很多我們不想看到的文本,而用jupyter打開又很慢。於是需要設置出一個可執行程序(exe文件)來打開.ipynb文件。

本文展示了一步步學習如何創建.exe程序的過程,最後做出我們想要的程序

本文分為如下幾個內容

生成最簡單的exe程序,只列印出一段字符串

帶有參數的exe程序

參數是文件名的情況

真正實現

改進方向

生成最簡單的exe程序

將python腳本轉化為exe程序比較常用的是兩個庫,py2exe和pyinstaller,由於前者不支持3.5及以上版本,操作也相對複雜,因此這裡選擇pyinstaller。

安裝:在cmd中直接pip install PyInstaller 就安裝好了。

之後我們只要使用pyinstaller這條命令即可,正常來說我們安裝好這個庫之後,pyinstaller.exe就在環境變量中了,所以我們可以在任何文件夾下的cmd窗口中調用這條命令。

pyinstaller庫生成exe文件非常簡單,只要一條命令就能自動生成,我們來看一下下面這個簡單例子

在cmd_try文件夾下創建hello.py文件,文件中的內容如下

i = input("please input your name: ")print("Hello World "+i+"!")
# 注意:py2中的raw_input在py3中改成了input
# 用input而不是只是print是為了防止到時候調用exe程序時窗口一閃而過

然後我們在cmd_try文件夾下打開命令窗口,輸入 pyinstaller hello.py 就會自動生成幾個文件夾,dist文件夾中的hello文件夾中,就有了hello.exe文件,雙擊這個文件就會彈出一個讓你輸入名字的窗口,這就代表這個可執行程序創建完成。 

註:同時會生成一個build文件,其中也有一個hello.exe,不用管它,把build文件夾刪掉,dist中的hello.exe文件依然可以運行 

如果要繼續修改程序,修改後的hello.py保存後,要再用pyinstaller hello.py這條命令重新生成,覆蓋原有的文件,hello.exe才能執行新的功能。

下面我們在命令行中調用這個可執行程序 

在之前的命令行窗口中輸入 cd dist 進入dist文件夾中,再輸入 cd hello 進入hello文件夾中,再輸入兩種命令都可以:

直接輸入hello即調用了hello.exe文件,會在當前這個命令窗口中讓你輸入你的名字

輸入 start hello 則會另外出現一個命令窗口讓你輸入你的名字

其中第一種其實和在cmd_try文件夾下的命令行窗口中輸入python hello.py效果相同,所以我們可以用這個來測試,測試結束後再生成exe文件

帶有參數的exe程序

因為我們的exe程序需要能夠打開一個文件,所以需要調用外部參數。下面我們實現在命令行調用hello.py文件時傳入參數。這裡使用python內置的命令行解析庫argparse,這個庫的官網特別詳細,一步一步教你如何操作,有興趣的讀者可以直接去官網學習,這裡僅僅做最簡單的使用。

hello.py文件中內容改為

import argparseparser = argparse.ArgumentParser()parser.add_argument("name", help="input your name") # 添加 name 參數,並指定help信息
args = parser.parse_args() # 讓args這個變量可以引用這個參數
print("Hello World "+ args.name +"!") # 用args.name引用命令行中輸入的參數

我們先直接用python來調用,在cmd_try目錄下的cmd窗口輸入 python hello.py "bob" ,我們想要的結果就會在下面被列印出來

註:因為剛剛我們用cd命令把命令行窗口的位置切換到了hello文件夾下,如果想返回 cmd_try 文件夾下,則輸入兩次 cd .. 即可

接下來我們將程序打打包成exe文件,輸入pyinstaller hello.py

cd到hello文件夾下輸入hello "bob"也可以列印出正常的結果

參數是文件名

為了和我們的目標更接近一點,我們現在實現提取一個txt文件中的內容,前後加一個html的標籤,再存成一個html文件

hello.py文件換為如下內容

import argparseparser = argparse.ArgumentParser()parser.add_argument("file", help="input your filename") # 添加 file 參數,並指定help信息
args = parser.parse_args() # 讓args這個變量可以引用這個參數
with open(args.file, "r") as f:    r = f.read()html = '<html><body>' + r + '</html></body>'
with open("a.html", "w") as f:    f.write(html)

同時在cmd_try文件夾中創建hi.txt文件,內容如下

Hi world!Hello world!

在cmd_try文件夾下的cmd窗口中輸入 python hello.py "hi.txt" 發現執行成功,在cmd_try文件夾下生成了一個a.html文件,我們可以雙擊這個文件則自動用瀏覽器打開,內容也是我們剛剛指定的內容。

於是我們再執行pyinstaller hello.py轉化為exe程序。同時刪除剛剛生成的a.html文件。

在hello文件夾下的cmd窗口中輸入 hello C:\python\cmd_try\hi.txt(具體更改為讀者電腦中hi.txt文件所在路徑) 則會在hello文件夾下生成a.html

刪除a.html文件,我們再換一種方式運行

右鍵hi.txt,選擇打開方式-選擇其他應用-更多應用-在這臺電腦上查找其他應用,然後找到hello.exe的位置,勾選上「始終用此程序打開」,點擊打開。這次沒反應,但是下次你雙擊這個文件,就會在cmd_try文件夾下產生一個a.html文件,即運行成功。必須要設置默認用這個程序打開該類型文件,因為用這個過程選打開是沒有效果的,只有雙擊打開才可以。雙擊打開就相當於用hello.exe調用這個文件作為參數,也就是之前我們在命令行中輸入的執行代碼。

到現在就萬事具備了,接下來我們只要把試驗的代碼換成處理.ipynb文件的就可以了

真正實現

用文本編輯器打開.ipynb文件發現,它是一個json格式的文本數據,因此我們可以直接讀取,轉化為字典列表,再進行提取、添加標籤即可生成網頁原始碼,再寫出來成一個html文件即可。

因為主要是查看代碼,所以這裡只提取標題和代碼,文本不予提取。標題會匯總在一起放在前面構成目錄連結。

在my_project文件夾下建立一個ipynb_view.py文件,裡面內容如下

import re
import json
import argparse
def view_ipynb_html(path_ipy, newname): # 傳入要打開的文件路徑,和新生成的文件名稱    # path_ipy 是.ipynb文件及所在路徑    with open(path_ipy, 'r', encoding='utf-8') as f:        a = f.read() # 讀取得到的是一個json格式的字符串    b = json.loads(a) # 轉化為字典格式便於處理    css = '<style type="text/css">\nul li{list-style: none;}\na {text-decoration: none}</style>' # 添加css樣式,讓目錄簡單一點    s = '<html>\n' + css + '<body>\n i want to replace here \n' # 創建一個字符串變量,之後所有內容往上面加,組成一個完整的html代碼    contents = '<ul>\n' # 目錄的html代碼,之後替換上面的 i want to replace here    for d in b['cells']:        
       if d['cell_type'] == 'raw' or d['cell_type'] == 'code': # 提取代碼            s += '<xmp>' + '\n'  # 這個標籤可以把裡面的內容原樣輸出            for i in d['source']:                s += i.rstrip() + '\n'            s += '</xmp><br>\n'        elif d['cell_type'] == 'markdown': # 提取標題            result = re.findall('#+ .+',d['source'][0])            
           if result:                n = result[0].count('#') # 查看幾級標題                result1 = re.sub('#+ ','',result[0])                s += '<h' + str(n) + ' id="' + result1 +'">' + result1 + '</h' + str(n) + '>' + '\n'                contents += '<li><a href="#' + result1 + '" target="">' + '&nbsp;'*(n-1)*4 + result1 + '</a></li>\n'    s += '</body>\n</html>'    contents += '</ul>'    s = s.replace('i want to replace here',contents)    
   with open(newname, 'w') as f:        f.write(s)# 命令行解析,以文件及其路徑作為文件的參數

parser = argparse.ArgumentParser()parser.add_argument("file", help="input your filename") # 添加 file 參數,並指定help信息
args = parser.parse_args() # 讓args這個變量可以引用file這個參數

# 提取新文件名
oriname = re.search("\\\\(\w*?\.ipynb)",args.file).group(1)newname = oriname.replace('ipynb','html')# 調用函數創建文件

view_ipynb_html(args.file,newname)

文件寫好保存之後,在ipynb_view文件夾下打開命令行窗口,輸入 python ipynb_view.py C:\Jupyter\base.ipynb (路徑改為讀者自己的.ipynb文件路徑),運行之後即可在ipynb文件夾下生成一個base.html文件,可以用瀏覽器打開查看筆記內容。

下面我們再將py文件轉化為可執行程序。在ipynb_view文件夾下打開命令行窗口,輸入pyinstaller ipynb_view.py即創建完成。

之後只要找到一個.ipynb文件,設置打開方式默認是ipynb_view.exe,以後每次雙擊.ipynb文件都會在.ipynb所在文件夾下生成一個同名的.html文件,速度還是很快的,這樣查看筆記就方便多了。

改進方向

上面只是提供一個思路和簡單的實現,還不是十分完善,感興趣的讀者可以再自己把代碼完善起來,可以有以下改進方向作為參考

第一是這樣每次生成的一個html文件,都要手動刪除。如果可以用程序控制把HTML內容直接用瀏覽器打開就更好了,或者編寫用完自動刪除的代碼

第二是上面創建html代碼的python代碼可讀性不強,只是因為需求比較簡單,暫時應付一下,有更高需求的讀者可以試一試編寫一個添加標籤、屬性、css樣式的類,讓代碼結構更加清晰。或者用現成的pyH庫貌似可以實現

第三是文本內容沒有加進來,因為裡面有各種markdown格式標記,不是很好處理,這裡就直接捨棄了,有需要的讀者可以寫程序把文本也讀取進來

Python愛好者社區歷史文章大合集

Python愛好者社區歷史文章列表(每周append更新一次)

福利:文末掃碼立刻關注公眾號,「Python愛好者社區」,開始學習Python課程:

關注後在公眾號內回復課程即可獲取:

0.小編的Python入門視頻課程!!!

1.崔老師爬蟲實戰案例免費學習視頻。

2.丘老師數據科學入門指導免費學習視頻。

3.陳老師數據分析報告製作免費學習視頻。

4.玩轉大數據分析!Spark2.X+Python 精華實戰課程免費學習視頻。

5.丘老師Python網絡爬蟲實戰免費學習視頻。

相關焦點

  • Python程序打包為exe可執行文件
    打包成exe可執行文件主要是使程序能夠在非python環境下也能得到執行,便於程序的分享使用。二、turtle庫:畫圖turtle是python自帶的標準庫,不需要額外安裝,可直接import turtle使用。這裡以turtle畫圖作例子,演示函數式編程與打包。在畫圖之前,需要了解這個畫布呈現的方式。
  • Python開發:Win10創建定時任務執行Python腳本
    :  Win10創建定時任務  電腦桌面→我的電腦→右鍵→管理  計算機管理→系統工具→任務計劃程序→創建基本任務    創建基本任務  創建基本任務之後,可以通過歷史記錄查看當前任務的執行信息,如果任務歷史記錄被禁用,可以點擊右側的 啟用所有任務歷史記錄 按鈕
  • 實戰Python3.7+64位 Exe 反編譯
    用文本工具寫個幾行的python代碼,如圖:安裝Pyinstaller是一個坑,我忙乎了半天,費了幾次勁才成功,真是要看運氣。安裝成功後,用pyinstaller -F filename打包編譯成exe。拖進exeinfo查看,果然是64位的;運行下,可以運行,說明編譯成功。
  • 如何在Visual Studio創建python文件並運行
    工具Visual Studiopython環境截圖工具技術python在Visual Studio開發工具中,創建python項目,根據項目的需要,新建不同的python文件;然後選擇python文件,進行運行。
  • [Python]文件與異常的錯誤處理
    ># 輸出了4個字符E:\Github\python\env\Scripts\python.exe E:/Github/python/files_error/fileIO/fileIO.pyMan: 2.
  • python實戰演練2:python可執行文件運行不成功怎麼辦
    要談到這個話題,我們首先對如何將python文件製作成exe文件做簡單介紹:眾所周知,python語言作為一種腳本語言,本身是無法自己轉化成可執行文件的,需要藉助第三方工具才能將其轉化為可執行文件(.exe文件)。
  • Python讀取ini配置文件
    python看過我之前文章的同學可能知道,最近一直在做百度語音合成的功能,進一步的延伸功能,此次是批量生成文章的語音文件。目前是使用python來實現的,將代碼打包成了exe文件,方便客戶進行測試。下面說一下配置文件,本次直說ini格式的配置文件。創建ini文件在目錄中創建.ini文件,我們以config.ini文件名為例。進行創建。在創建好的文件內編寫配置信息。
  • Python打包exe的王炸-Nuitka
    python寫代碼很爽,一直寫一直爽!
  • exe程序製作成安裝文件,自己寫的軟體打包成安裝程序步驟
    我們自己編寫的程序已經可以在本地運行了,如果要變成像qq那樣的安裝包該怎麼做呢?這裡需要藉助打包工具來進行,我使用的是VNISEdit軟體,該軟體免費且簡單高效,下面來看下如何打包成安裝程序。2 確保自己本地的exe程序可以正常運行,比如我自己用python寫的一個播放器,雙擊後能夠正常運行,然後我將所有用到的程序附件都放在一個文件夾內,便於後面打包。
  • Python打包成exe時,再犯這幾個錯誤就說不過去了
    這樣在開發階段其實蠻好的,但是到了發布階段就遇到了大麻煩:很有可能對方的windows計算機裡面沒有安裝python解釋器,導致您辛苦熬夜白了頭開發的Python腳本無法成功部署運行,到了這個階段,可以說是萬事俱備只欠東風了。
  • ink文件用什麼打開?雙擊就可以了,它只是一個快捷方式而已
    ink文件用什麼打開?它只是一個快捷方式,雙擊即可打開。但ink文件並不是程序本身,它只是一個「入口」。通俗一點講,文件後綴名帶有「.ink」的文件都相當於一個「傳送門」,通過雙擊它,可以直接開啟這個ink文件指向位置的一個程序或文件,要麼是運行了一個程序, 要麼是打開了一個文件。
  • python使用with as處理文件的讀寫
    在python中使用with語句,可以自動調用close()方法,同時也解決了異常問題。with open('test.txt','w') as f:f.write('Hello, python!')python文件讀寫模式:r:以只讀方式打開文件,指針放到文件的開頭。rb:以二進位格式打開文件用於只讀,指針放到文件的開頭。r+:打開文件用於讀寫,指針放到文件的開頭。
  • 慢步python,如何用python語言創造出一個真正的獨立exe程序?
    獨立的應用程式應該像QQ,微信一樣不依靠其他程序運行,只有平臺支持,就可以運行。從這個意義上說,所用應用程式都是基於作業系統運行的。那麼如何用python語言創造出一個真正的獨立的應用程式?就是我們電腦上的exe程序?
  • Windows 應用程式 exe 打開方式出錯恢復解決方法
    在 Windows 系統中我們都知道,一般默認都是執行 .exe 後綴的文件來打開應用程式,可是當 .exe 後綴的文件格式突然以其它打開方式被其它應用程式打開就會出現錯誤了。而群友出現的正是這種問題,所以,他不知道該怎麼辦了。
  • python將腳本與交互模式結合
    python.exe的位置首次安裝Python軟體時,應該在硬碟驅動器上的某個位置創建一個目錄,其中包含一個名為 python.exe 的文件 。您將需要找到該文件。,例如名為python.exe 的文件 。
  • Python打包工具--Pyinstaller詳細介紹
    修改鏡像默認配置後完成了pyinstaller的下載後,終於趕在日落西山前將我這一行print代碼打包成了exe文件,發給同事炫耀。現在想想好幼稚...一發不可收拾也許就是因為pyinstaller這傢伙,導致我的python路線直接跳過基礎,從easygui和tkinter開始了...有exe如果再能配上GUI,那豈不是裝13必備。
  • 「小白福利,快速入門Python」之處理文件
    歡迎關注公眾號【哈希大數據】python實例 合併文件並去重運行結果:"D:\anaconda python\python3.6.exe因此在python中操作文件也不例外,首先使用Open打開文件的常規的語法為:open(' D:/try/merge_result.csv', 'r', encoding='gbk', errors='ignore')1、文件讀取第一個參數:讀取位置的設置(位置參數,必須指定):
  • vscode寫Python數據處理分析代碼,由安裝配置到cell交互模式
    我在F盤創建一個文件夾py_test,下面用vscode打開這個目錄:點擊左邊第一個小圖標,這是管理文件的地方點擊旁邊小窗口的"打開文件夾"按鈕選擇我們的項目文件夾其實你可以直接在文件資源管理器(就是你平時玩耍文件的地方)中,直接用滑鼠把該文件夾拖放到 vs code 界面中,即可快速打開此目錄。
  • 手把手教你py腳本打包為exe
    Python腳本轉換為Windows環境運行的exe文件,在沒有部署python的電腦上直接運行你的程序!!!只需簡單兩步!pyinstall使用具體的opts參數解釋如下:-F 指定打包後只生成一個exe格式的文件(建議寫上這個參數)-D –onedir 創建一個目錄,包含exe文件,但會依賴很多文件(默認選項)
  • 如何使用Visual Studio工具創建python項目
    隨著工具不斷完善,現在也可以進行python項目開發了。那麼,如何在Visual Studio 2019工具上創建python項目?操作步驟:1、通過快捷方式或電腦開始菜單,雙擊打開Visual Studio 2019工具