顯示具有 電腦 標籤的文章。 顯示所有文章
顯示具有 電腦 標籤的文章。 顯示所有文章

2020年6月1日 星期一

2020年5月21日 星期四

Windows MS word檔批次轉pdf工具

不知道大家有沒有想要一次轉換好幾個word檔成pdf檔的經驗呢?
雖然有很不少線上工具可以用
而且有些 word 本身也有支援轉檔的功能
可是一個一個檔案來操作實在是太累了
今天下午在處理這件事的時候,就順手把
python 原始碼打包成執行檔了

原始碼與執行檔案連結跟大家分享:
https://drive.google.com/drive/folders/1SRHodqTzwkxZu_SRtTeCCRdhCDbYrQQB?usp=sharing



#coding:utf8
import os, sys
from imp import reload
reload(sys)
from win32com.client import Dispatch, constants, gencache
def doc2pdf(sourceF,tartgetF):
    #sourceF = 'D:\\1.doc'
    #tartgetF = 'D:\\1.pdf'
    print(sourceF,' ==> ',tartgetF)
    # enable python COM support for Word 2007
    # this is generated by: makepy.py -i "Microsoft Word 12.0 Object Library"
    gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
    # 開始轉換
    w = Dispatch("Word.Application")
    try:
        doc = w.Documents.Open(sourceF, ReadOnly=1)
        doc.ExportAsFixedFormat(tartgetF, constants.wdExportFormatPDF, \
        Item=constants.wdExportDocumentWithMarkup,
        CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
    except: print('exception')
    finally: w.Quit(constants.wdDoNotSaveChanges)
    if os.path.isfile(tartgetF):print('translate success')
    else:print('translate fail')
    
desktop = os.path.join(os.path.join(os.path.expanduser('~')), 'Desktop') 
print('DOC/DOCX  to PDF  batch converter .  by K.Y. Lee (c) 2020 All Rights Reserved')
folder = input('„enter the target folder of MS doc/docx files on YOUR Desktop\n輸入欲轉換之word文件資料夾名稱(桌面上)[不需完整路徑]:')
DIR = desktop+'\\'+folder+"\\"

files = os.listdir(DIR)

for f in files:
    ii = f.find('.doc')
    if ii>0:
        doc2pdf(DIR+f,DIR+f[:ii]+'.pdf')

2019年5月3日 星期五

建立python程式自動執行批次檔(with Anaconda promt)

在windows 底 要執行 寫好的 python 程式必須打開 cmd.exe 視窗
並輸入:
python xxxx.py  (xxxx.py為欲執行的程式檔名)
(別忘了要加上python的環境變數)

偷懶一點的話可以寫成批次檔,想執行的話點批次檔執行就可以了,
不過如果您的python程式是寫在 Anaconda 上的話… 就有一點麻煩了…
一般而言,我們要透過 anaconda prompt 開出來的視窗來執行在
anaconda IDE 底下寫好的程式,這樣一些函式庫的路徑才不會跑掉,
這件事如何寫成批次檔呢? 底下讓我們一起來看看

Step1.建立一文字文件內容如下:



set exDir="C:\Users\xxxxx\"      ===>欲執行之 .py 檔所在資料夾路徑

set exFilename=xxx.py              ====>欲執行之 .py 檔名

set root="C:\ProgramData\Anaconda3"

call %root%\Scripts\activate.bat %root%

cd %exDir%

python %exFilename%

pause

Step2.將文字文件另存為批次檔,例如: xxx.bat

2019年5月2日 星期四

win7+Anaconda+python+pyinstaller 打包執行檔 + cp950 解決方法



        python是一種直譯式的語言,不需要經過編譯就可以執行,不過相對的一定要有對應的 python 直譯器的環境才可以運作,本篇文章將介紹把 python 打包成執行檔的方法,不過打包好的執行檔應該還有平台上的限制,在MS Windows上編譯的程式一般也只能在MS Windows相容的作業系統上運作

Google關鍵字:"anaconda 打包執行檔"

※打包命令(需先安裝 pyinstaller)

pyinstaller -w -F xx\xx\xxx.py

打包的過程會出現各種不同的錯誤訊息,詳細閱讀後找到發生問題的程式區塊及錯誤訊息內容,並 google解決方案,

下面列出幾種作者打包時出現的錯訊息:

1.Cannot find existing PyQt5 plugin directories

解決方案參考連結:
https://www.twblogs.net/a/5c23a691bd9eee16b4a7c6ee
https://github.com/pyinstaller/pyinstaller/issues/3852

這個問題作者單純安裝 PyQt5 就解決了
pip install PyQt5


2.UnicodeDecodeError: 'cp950' codec can't decode ...


解決方案參考連結:
https://stackoverflow.com/questions/49021589/how-do-i-fix-this-cp950-illegal-multibyte-sequence-unicodedecodeerror-when-rea
https://blog.csdn.net/chuatony/article/details/71436582
這是個常見的編碼問題,在 python2 及 python3上的解法略有不同
作者的 python版本為 3.6

找到的發生問題的程式碼後,必然會發現程式在執行
open() 函式後,引用 read() 、write() 之類的函式後發生問題
此時只要在相關函式呼叫時,規定編碼方式為 utf-8 即可
ex:
open(filename, "r")
改成==>
open(filename, "r",encoding="utf-8")






2018年12月13日 星期四

App Inventor2 Class1

※Note:
①手機若沒有內建 QR Code Reader 請先至google app store下載安裝
②由QR code下載 apk檔至手機執行之前要先處理安全性設定,參考網站如下:
http://iuiii.net/app-inventor-2/118-ai2-08-01

2018年12月4日 星期二

淺談浮點數

大家都知道電腦是二進位系統的計算機器,可快速計算龎大的數值
那的二進位的數值該如何表示呢?

在數學上我們大致會將實數有理數和無理數,無理數如圓周率 3.14.5.... 在小數點後可有無窮位數的延伸,電腦運算會有精確度的問題, 只找一個有理數去做逼近。

這裡我們先來談談的有理數,有理數必定可表達為兩個整數相除(分數形式)
ex:   1.5 = 3/2

那我們首先要解決在電腦中整數的二進位表達與運算的問題,二進位的表達我們在之前的文章已經討論 過了,接下來要討論的是,不全然是整數時電腦該如何表達與運算,電腦通常管這種不全然為整數的數值表示法為浮點數(float point)

電腦的整數表示法有最大值和最小值的限制
在整數運算過程中超出最大值時會產生溢位問題
而浮點數表示法可表達的最大值到最小值的範圍卻遠大於整數表示法
不過…
相對於整數,在電腦中的浮點數會有精確度的問題
先以大家比較能接受的十進制的表示法來舉例:
像我們表達 12351234567893123.46879879879686546465465465465432132112321
這一個數值時可能只能精確到
                     12351234567893000
       
          而表達 0.00000000000012345645654654631321555
這一個數值時可能只能精確到
                      0.000000000000123456

由上面的例子你應該會注意到數值的精確度並不是我們熟係的"小數點後第n位"
當數值很大時有可能連百位數都是不精確的

為什麼會這樣?  因為表達浮點數的位元數是有限的(ex:32位元),硬要表達很大的數值時就只好把相對較小的位數捨棄掉了,這裡我們就來看看目前大部分PC通用的 IEEE 754 浮點數表示法如何運算 : 文字說明參考連結






2018年11月21日 星期三

軟體應用專輯2

※軟體應用專輯2


提到文書處理軟體如 word 、 excel 多數同學都會認為那是早就學過的東西,或是
根本不用教就可以學會的東西,在這裡幫大家整理我認為最常用且最必要熟係的
功能:


1.如何用Word做出一張履歷表?

a.如何處理表格

b.如何插入圖片

c.如何插入excel圖表

==============================

2.自學Excel功能

給定excel表格: 學生成績表 

※excel 表達"資料範圍"的方法:

        開始欄位(左上角) : 結束欄位(右下角)
  ex:                  A1           :             C3

a.如何求平均、求加總
b.如何排序
c.如何做排名         =rank( 目標欄位 ,  範圍) 

   範圍要先用 $ 符號做鎖定 ex:    R$2 : R$36

d.如何統計次數   = count( 目標欄位 ,  範圍)

e.如何設定格式化條件


f. 如何利用 $ 符號鎖定欄位

g.如格凍結窗格
後記:

在文書處理的世界,除了微軟的office之外還有很多其它 的選擇如 libreoffice 及 google document .... , 但其實操作方式都大同小異,在軟體著作權日益被重視的年代,各種
好用的免費或開源軟體值得大家關注


2018年10月31日 星期三

軟體應用專輯1

#1 Active Presenter  螢幕錄製與影音剪輯

https://free.com.tw/activepresenter/

範例影片


#2 簡報軟體使用

2018年10月8日 星期一

手遊外掛程式範例 by Python

手遊外掛程式範例1 - 別踩白塊兒

        桌機PC的執行效能可以比其它手持裝置高上許多,在pc上只要搭配多一點記憶體和
虛擬加速的硬體就可以在單一機器上同時運行多個不同的模擬器 (VM)
底下我們在Windows 平台上架設手機模擬器並嘗試用程式控制滑鼠鍵盤以實現手遊的外掛程式的開發
投影片下載

2018年7月5日 星期四

機器學習-筆跡辨識原始碼分享

完整_手寫數字辨識

完整手寫數字辨識(以SVM為例):


step1 訓練、測試資料產生(特徵擷取): 參考scratch程式

step2 模型訓練階段

step3 實際測試階段

※ 讀入訓練資料( 將訓練資料都放到變數 xx 中)

In [130]:
import numpy as np
import winreg
offset = 40
scale = 20
#取得桌面路徑
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
deskTop=winreg.QueryValueEx(key, "Desktop")[0]

x1 = np.loadtxt(deskTop+'/1.txt',delimiter=',',dtype='float') 
print("已讀取 1 訓練資料共{}筆...".format(len(x1)))

x2 = np.loadtxt(deskTop+'/2.txt',delimiter=',',dtype='float')
print("已讀取 2 訓練資料共{}筆...".format(len(x1)))

x3 = np.loadtxt(deskTop+'/3.txt',delimiter=',',dtype='float')
print("已讀取 3 訓練資料共{}筆...".format(len(x1)))

# 將 x1,x2,x3 三個矩陣垂直合併
xx = np.vstack((x1,x2,x3))
已讀取 1 訓練資料共50筆...
已讀取 2 訓練資料共50筆...
已讀取 3 訓練資料共50筆...

※ 產生對應的答案標籤 yy

In [124]:
y1 = np.array([1]*len(x1))
y2 = np.array([2]*len(x2))
y3 = np.array([3]*len(x3))
yy = np.vstack((y1,y2,y3)).flatten()
print(yy)
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3]

※ 資料處理 (將xx 微分、平移、縮放)

In [125]:
#資料對時間微分
xx_ = xx[:,2:]
dX  =xx[:,:-2] - xx[:,2:]
xx = dX
#資料平移與縮放
xx = (xx+offset)/scale

print('samples(訓練樣本)')
print(xx)
print('labels(訓練樣本對應的答案標籤)')
print(yy)
samples(訓練樣本)
[[2.   2.   2.   ... 2.   2.   2.  ]
 [2.   2.   2.   ... 2.   2.   2.  ]
 [2.   2.   2.   ... 2.   2.   2.  ]
 ...
 [1.5  1.85 1.3  ... 2.   2.   2.  ]
 [1.45 1.85 1.35 ... 2.   2.   2.  ]
 [1.75 1.85 1.95 ... 2.35 2.3  2.05]]
labels(訓練樣本對應的答案標籤)
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3]

※ 訓練階段: 有了訓練資料 xx 及對應的標準答案 yy 就可以餵給模型學習了

In [126]:
from sklearn.svm import SVC
clf=SVC()
#clf=SVC(probability=True)
clf.fit(xx,yy)
Out[126]:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)

※ 測試階段:讀入測試資料,經過資料處理後 加以辨識

In [131]:
test=np.loadtxt(deskTop+'/TEST_123.txt',delimiter=',',dtype='float')

dTest  =test[:,:-2] - test[:,2:]
test = dTest
test = (test+offset)/scale

print(clf.predict(test[0:10,:]))
print(clf.predict(test[10:20,:]))
print(clf.predict(test[20:30,:]))
[1 1 1 1 1 1 1 1 1 1]
[2 2 2 2 2 2 2 2 2 2]
[3 3 3 3 3 3 3 3 3 3]