發表文章

目前顯示的是 2021的文章

在網頁看 Word 檔

 看起來不是個事兒的事,在整合的時侯也常常得折騰一下,這次想要把 word 檔的內容和自已報表對照一下,看看有沒有出入,雖然把網頁、word 分別打開來比也行,奈何,工作時常常同一時間開了一堆要用到的檔案,切來換去,找來找去,螢幕怎麼也不夠用,不如訂好讓電腦幫忙,看每次要怎麼開,開那些,怎麼呈現,一次到位,與其每次自已做,不如做一次,之後交給電腦 工作環境:   WAMP   python 3   mamoth   MS Word 文件   從 Word 轉出的 HTML 檔案 有人說如果用 php 給個適當的 header 也行,因為已經想要逐漸轉到 python 平台,而且連 header 處理也想一併略過,於是選了 mammoth 這個 python 工具,它不但可以在 python 裏面 import 使用,也支援在終端機透過指令直接把 Word 文件轉成 HTML 檔,所以這個解法是在 HTML 裏顯示轉好的 HTML 文件,然後,就跳坑了…… 中文的內容,在很多時侯都是要特別處理字碼的,把 word 轉出成 html 之後,它的內容要引用時變成了亂碼,會干擾原本正常顯示的內容,還好,markdown 格式是可以用的,不用再去修正字碼的問題,就不折騰了,立刻放棄 html 格式。 大致上就是 mammoth --output-format markdown "ExtractInput/somefile.docx " --output-dir "ExtractOutput/" 然後,把轉出的結果引用(echo(file_get_content("path/file"))到網頁中。 收工! ================= 坑 =============== 有人 提到 可以用 google document 開,沒有成功 也有人說 Word 就用微軟自家的網站開,同樣沒有成功 用以上這兩個方式可能是因為文件在內網伺服器裏所以沒有成功,如果你自已的網站是外網/網際網路上倒也可以試試,直接把 Word 文件嵌在網頁裏,很酷

python 記錄器

 python 有個 logging 的 module ,不難,能夠滿足輸出訊息到終端上,也能再存個檔來觀察,雖然要做到醬子並不難,透過官網的說明大致上每次大概使用同樣的10幾行就可以完成引用。由於還沒有找到像 laravel 一樣的 debugger 工具,希望之後每次引用只要1行就行,好在…已經有人把物件(class)寫好,存好檔後之後每次要引用只要1行就行。  工作環境:     Windows 10     Python 3         logging         sys   #!/usr/local/bin python3 # -*- coding: utf-8 -*- ''' # 使用方法:   # import THIS_FILE_NAME(不包括 .py 的部份) # logger = log.dLogger(log_file=myLog, name=myTag) # logger.debug("字串;通常是執行的結果")  # 結果: 2021-12-27 21:15:03,965 - myLogTag - DEBUG - blablabla  ''' import logging import sys from logging import Logger from logging . handlers import TimedRotatingFileHandler class d Logger ( Logger ):     def __init__ (         self ,         log_file = None ,         log_format = " %(asctime)s - %(name)s - %(levelname)s - %(message)s " ,         * args ,         ** kwargs     ):         self . formatter = logging . Formatter ( log_format )         self . log_file = log_file         Logger . __init__ ( s

中文簡繁轉換兩三事 Opencc

 中文簡繁轉換之前是用 convertz ,一來應用程式已經不知道放哪兒去了,二來目前網站上的範例用的都是 opencc ,不想折騰就跟風了,結果還是折騰了一下。 工作環境:     Windows 10     Anaconda     Python 3 (3.6,3.8)         opencc, hanlp     MS Visual Studio Build Tool + VC         opencc v1.1.3  總結一下,要在 Windows 上使用  OpenCC ,大致上要裝 VC ,下載 Opencc 來編譯,設定引用檔案,複製引用檔案到專案資料夾,開始使用 OpenCC。  OpenCC 目前是放在 https://github.com/BYVoid/OpenCC 沒有已編譯好的執行檔,如果要的話,得自已編譯, 如果要用 python 處理,安裝倒是簡單 pip install opencc 然後就 import opencc converter = opencc.OpenCC('s2t.json') converter.convert('汉字') # 漢字 好在之前為了要抑制 python gensim 產生的提示訊息要 pip install python-Levenshtein 在安裝時環境所需已經先裝好了 VC(v142)  因為想要使用範例中的指令方式處理資料所以自已編譯 opencc ,照著 OpenCC 說明檔 git clone https://github.com/BYVoid/OpenCC.git  build.cmd test.cmd 之後到 build/bin 裏面去找執行檔就行  OpenCC 的 data 裏有 config, dictionary 在轉換時會用到,要用的時侯,複製到專案的資料夾中 OpenCC 才能作用,其中設定檔要改一下,因為沒有發現所需的 osd 檔,好在 txt 檔還是有的, s2tw.json: type: ocd 改成 type: text ; file:*****.ocd 改成 file:*****.txt 再把相對應的 txt 檔(也就是下方所指的 *****.txt)複製到專案資料夾 {   "name" : &quo

指定想要的檔案類型 解壓縮搬到想要的地方 再指定要去的聯結網址

 這次想來點…和標題一樣的事,都是一些基本的檔案操作,只是以往都是用 PHP 這次要用 python ,使用越來越多的 python 覺得它的限制好像少一些,新用途多一些,可能還是得慢慢轉過去,唉!一把老骨頭,聽到朋友說,他們公司的工程師平均 3x 歲,年輕真好啊,逝去的青春如是喃喃著…… import glob, os from pathlib import Path from datetime import datetime from zipfile import ZipFile as zf import shutil import webbrowser myPath = "C: \\ Downloads" extractTo = "C: \\ Downloads \\ Extract" moveTo = "D: \\ moveHere" smsF = u "sms.jpeg" ptF = u "pt_20211129123456789.ods" output = [] now = datetime.now() today = now.strftime( "%Y%m %d " ) thisH = now.strftime( "%Y%m %d %H" ) zPwd = b "1234" # 找下載資料夾中,最後修改日期是今天,類型是 zip 的檔案 myExt = ".zip" for root, dirs, files in os.walk(myPath):     for file in files:         if file .endswith(myExt): #             print(os.path.join(root, file)) #            if (file.find(today) != -1):             if ( file .find( "Gmail" ) != - 1 ):                 output.append(os.path.join(root

逃不開的 jupyter 要客製啟始位置

圖片
 jupyter 做為開發 python 的工具實在太好用了,即使有了 VS Code 也是逃不掉,面對它,處理它,放下它,希望只設這一次就好, XD 工作環境:   Windows 10 pro 用另一個 user 帳號裝的 anaconda     anaconda       python       jupyter 執行的時侯,因為工作使用的帳號和之前安裝 anaconda 的帳號不同,真的懶得切換到安裝的帳號,也不想重裝就想啟動 jupyter 時,能到讀取客製的資料夾。 發現,原安裝帳號 jupyter 的設定檔已經有了,裏面的資料夾也有設: ## The directory to use for notebooks and kernels. #  Default: ''  c.NotebookApp.notebook_dir = u 'D: \\ somewhere'  表示之前已經 jupyter notebook --generate-config  即使改了原安裝帳號的設定檔還是不會讀指定的資料夾,所幸找到了個不用折騰的設法,把原本的 USERPROFILE 改掉 改好目標的最後部份就行   按下捷徑執行 jupyter  ,通常是連到 http://localhost:8891/tree 如果不能設密碼,記得看那個黑黑的終端機裏面,有個有 ?token=blablabla..... 的連結,用它來開你的 jupyter 。 [I 11:22:33.999 NotebookApp] http://localhost:8891/?token=c49adblablabla......................... 收工!                

有什麼服務在運行 用的是哪個套件

 一開始聽到少就是多的時侯總想著怎麼可能,多就是多,少就是少,耐何選擇多的時侯,就真的亂了,亂了不打緊,糟糕的是找不到頭緒來處理。這次想知道的是,用的網頁伺服器是那個?裝太久,忘了 :p 工作環境:   Ubuntu Server TLS 18    方法: 1、 netstat -tulpan | grep -w ":80" 不行,但是骨哥出來的文章說可以,企!   tcp6       0      0 :::80                   :::*                    LISTEN       - 原來是要 sudo 才會顯示 tcp6       0      0 :::80                   :::*                    LISTEN       1234/apache2 2、lsof -i :80 不行,什麼都沒輸出,但是骨哥出來的文章說可以,企!  也是要 sudo 才會顯示 COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME apache2  1234     www    4u  IPv6  12345      0t0  TCP *:http (LISTEN) 3、fuser 80/tcp  不行,什麼都沒輸出,但是骨哥出來的文章說可以,企!   還是要 sudo 才會顯示  80/tcp:               1234 12345 23456 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^啥鬼 ps -p 1234 -o comm=  apache2 4、後來想到的,去 /etc 下面看一下,如果沒有同性質的套件都裝了的話就可以知道用的是哪個套件了 所以, lsof 蠻直覺的,但是覺得可能會忘(這就是為什麼要把這個這麼簡單的東西寫下來的原因了咩),netstat 常用,多記個 grep -w 就行,還有莫忘 sudo。   收工!

selenium 的二三事

 Selenium 做為網頁測試之用真的好用,函式也很直覺,網站上很多相關的文件,這裏紀錄一下自已用到的一些可能比較要注意的。 python 要裝 selenium  還有一些可能用得到的像是 datetime, time, os, random, pyautogui, yaml, codecs, wget, urllib3 如果要辨識圖形驗證碼,還要再用 cv, tesseract ,這個部份的程式要先裝好,再裝 python 的函式庫 大致的操作   引用所需的函式庫往上拉到最上面,以免操作時引用無法順利抓取網頁內容 from datetime import datetime from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from selenium.webdriver.firefox.options import Options from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select import time import os import wget import random import pyautogui import cv2 import pytesseract import yaml import urllib3 import codecs 設定日期可能少不了 now = datetime.now() today = now.strftime( "%Y%m %d " ) 讀取帳密也常用 #找到對應的帳密位置 save_path = "D:/somewhere/se

symfony var-dumper 和 php 的除錯工具 whoops

 PHP 的除錯,借助最基本的 echo print_r 已久,雖然早有除錯工具,像是 Xdebug 之類,總覺得在部署上不是很直覺,在使用 Laravel 的時侯,覺得它的除錯工具不錯,就是訊息好多,繞來繞去的,有時侯反而模糊了焦點,但是,不是什麼東西都需要拿 Laravel 出來用的,這時侯又想回頭去試試 Laravel 的除錯工具了。 工作環境:   PHP     flip/whoops     symfony/var-dumper 安裝很直覺 composer require symfony/var-dumper composer require filp/whoops 引用要花點工夫 $debug = TRUE ; $debug = FALSE ; # Composer 自動載入 require_once __DIR__ . "/vendor/autoload.php" ; if ( $debug ){     # Whoops     $whoops = new \Whoops\ Run ;     $whoops -> pushHandler ( new \Whoops\Handler\ PrettyPageHandler );     $whoops -> register ();     error_reporting (E_ALL); } else {     error_reporting ( 0 ); } 連追蹤時的 echo 也不想打了 function dumpVar ( $var ) {   //有開 whoops 時使用   foreach ( $GLOBALS as $var_name => $value ) {       if ( $value === $var ) {           echo $var_name ;           dump ( $var );       }   }   br ( 2 ); }   function br ( $cnt = 1 ){   for ( $i = 0 ; $i < $cnt ; $i ++) {     # code...     echo '<br/>' ;

PHP beep

 PHP 定位為伺服器端作用,所以使用端要發出聲音,還是折騰了一下,好在還是能透過網頁來完成。 作業環境:   windows 10   php   html   播放用的聲音檔 結果: <audio controls autoplay loop><source src="Christmas.mp3"></audio> 或者 function   beep ( $controls = 'controls' , $autoplay = 'autoplay' , $loop = 'loop' , $source = 'inc/Christmas.mp3' ){      return   '<audio '   .   $controls   .   ' '   .   $autoplay   .   ' '   .   $loop   .   '><source src="'   .   $source   .   '"></audio>' ; } echo   beep (); 如果沒有自動播放聲音檔可能是瀏覽器不允許自動播放,請參考  自動播放音訊也能踩坑 audio autoplay not working solved 收工! --------------------------------- 一些沒有成功的 --------------------------------- beep(2); 沒有這個函式 echo chr(7); 沒有反應 function beep() {     fprintf ( STDOUT, "%s", "\x07" ); } 不存在 STDOUT exec("mpg321 --quiet --gain 10 inc/Christmas.mp3"); 沒反應,可能缺乏 mpg321 這個執行檔 <EMBED src="inc/Christmas.mp3" autostart=true loop=

無邊框瀏覽器

圖片
 有些網頁,像是今天想做的,監看的網頁,想要放在一個螢幕上,就盯著,看著,不想要其他的工具列、其他視窗、下方的windows啟始程式列干擾... 在久遠的記憶中,可以用無邊框模式,後來,年久失修的記憶果然是不可靠的,雖然可以用指令開啟捷徑,然後加一堆參數來啟動瀏覽器,但是這樣子前置設定很麻煩……而且進入後的操作因為和日常差很多,所以也很麻煩,好在年久失修的記憶還是找到了好小的不常用的圖示  捷徑的指令大致長得像醬子,但是這只能將瀏覽器開到指定網堆並將視窗開到最大,其他的話,就…算了,還是把生命用在更美好的地方吧 "C:\Program Files (x86)\blabla\chrome.exe" -kiosk -fullscreen -overscroll-history-navigation=0 https://somwhere.com  "C:\Program Files\blabla\firefox.exe" --kiosk=https://office.ricky.com -fullscreen chrome 的方式 firefox 的方式 快捷鍵是 [F11]  或是在筆記型電腦上可能要用 [fn] + [F11] 收工!

在 iframe 裏自動播放 youtube 的嵌入網址

圖片
 折騰這個的目的就是讓影片不用再多點一下就自已播放,youtube 的影片裏面有個複製聯結的工具,甚至可以讓使用者複製嵌入用的網址,讓你收到網頁中分享給其他人,還想要影片自動播放(autoplay),搜尋之後就會得到一堆,加上 autoplay=1 就可以的搜尋結果,但是…… 工作環境:     windows 10 pro     chrome / firefox     自訂的網頁         含 iframe         含 youtube提供的嵌入網址  症狀:加上 autoplay=1 參數的影片不會自已動,還是要再手動點一下 自訂的網頁長得像這樣: < iframe   id = "player"   width = "850"   height = "400"   src = "https://www.youtube.com/embed/SOMEFILMID?&autoplay=1"   frameborder = "1"   allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"   allowfullscreen ></ iframe >  用 jquery trigger('click') 是點不到的,可以透過 python autogui 來達成,但是有時正在工作,在那個看網頁的某門(moment)把滑鼠拖走了,影片就僵住了。  搜了一堆 autoplay 都是講的廢話,像是 chrome 可以 autoplay,firefox 可以 autoplay ,想當然爾,一定是只能玩自已、自已玩才有了這篇筆記。 先講 firefox ,因為很好設定:去那個右上角的三條橫線下按下去,然後:隱私權與安全性 > 自動播放 > 開啟 firefox 設定自動播放   Chrome 很難搞,它的 autoplay 預設是開啟的,又另外搞了個參數,讓你無法 autoplay ,而且,沒有使用者界面(ui)可以設,當然也可以選擇 &

網站突然進不去了 SSL 收到含超出最大允許字串長度的記錄

  網站突然進不去了,分明什麼設定都沒有動過,重開機個幾次,或是過個幾天,突然能用的東西不能用,這種情形最揪心,又要燃燒一些生命了。 工作環境:     Windows 10 pro     laragon Full 4     Firefox/Chrome/Edge     症狀:每個瀏覽器出現的不太一樣,但是大致相同 SSL 收到含超出最大允許字串長度的記錄。   錯誤碼: SSL_ERROR_RX_RECORD_TOO_LONG  雖然知道是 SSL 憑證的問題,但是,用 laragon 這種工具就是不想去搞那些細(魔)節(鬼),好在這次也不用和這些細項設定打交道,直接: Menu > Apache > SSL > enable ,laragon 會把 SSL 憑證設好,再把 https 的設定檔設好  然後就不用再然後了 收工!    

再探 NLP 筆記

 之前,忘了多久之前,曾經小小用過分詞工具,可以很快分詞幾百個字幾秒鐘就分好了,但是分詞結果很不理想,最近又想動手做個專案,可能會用到分詞,又去爬了爬文,還是無法繞過分詞,而分詞這工作,因為 AI 又有了一定程度的發展,除了傳統分詞方式,現在好像還可以借助 AI 之力(毒藥還是很可口的,所以敗亡之路,早已經舖好),要用 AI 了!?然後…連取得都有困難…, AI 果然讓人 I I 叫啊… 工作環境:     Windows 10 home     anaconda         base: python 3.8         paddle         jieba 一開始的時侯, anaconda 一直說找不到 paddle 的套件,後來在一個網站上看到用這個終於順利裝上了(paddlenlp),結果測試的時侯,還是出現了沒有找到 Paddle 的訊息,因為要從對岸的清大來源裝的時侯出現了錯誤訊息,只好再重新找如何安裝的 channel ,終於不用降版(很多文章都說要降版)就能裝了: pip install --upgrade paddlenlp -i https://pypi.org/simple   以為裝上了,結果測試的時侯,還是出現了沒有找到 Paddle 的訊息,因為要從對岸的清大來源裝的時侯出現了錯誤訊息,只好再重新找如何安裝的 channel ,好像很容易就可以裝好: conda install paddlepaddle PackagesNotFoundError: The following packages are not available from current channels: - paddlepaddle  搜索 anaconda :會出現很多來源,選一下 anaconda search -t conda paddlepaddle InsecureRequestWarning: Unverified HTTPS request is being made to host 'api.anaconda.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/adv

PHP 執行系統指令 以執行 python 為例

 想偷懶,不想為了 ptyhon 再設一個 web server ,雖然直接從 PHP 去執行系統指令好像不太安全,不過反正只有自已在用,忽略之,所以這次要處理的是路徑問題… 工作環境:   Windows 10 home   Apache with PHP 7   Python 3 PHP 裏面主要的語法像這樣 $command = escapeshellcmd('D:/pythonPath/python.exe D:/scriptPath/app.py'); exec($command, $out, $status); 其中 D:/pythonPath/python.exe 的路徑:     一定要指向絕對路徑(即使已經設好環境變數也要給絕對路徑)     可以用 / 也可以用 \\ 也可以用 \  收工!

PHPlot 中文亂碼

圖片
 現階段比較常用的繪圖函式大多是 javascript 為主流,有很多,也不勝枚舉,D3.js、C3.js、Chart.js ...,遙想(抬頭)只有 GD 可用的年代,回頭用這函式老而不殘,實在是因為抓取資料的 PHP 程式運作順暢,想說就直接用 PHP 把圖做一做,哪知道,只怕是更折騰,這次又碰到老朋友,俗稱「亂碼」的編碼問題… 工作環境:   Windows 10 home   php     phplot     workplace/font/fireflysung.ttf 症狀: SetFontTTF: Can't find TrueType font fireflysung.ttf 整片白的一張圖 試了半天,原來只能設定絕對路徑,不能設相對路徑 範例: //all these below WORKS with setting of absolute path 用絕對路徑、絕對路徑、絕對路徑  $plot -> SetTTFPath ( "D: \\ workplace \\ font \\ " );     //works $plot -> SetDefaultTTFont ( 'NotoSerifCJKtc-Black.otf' );   //works $plot -> SetTitle ( "符合與其他可能" );   //works  //these also works with correct path setting //using ttf font with correct path setting //$plot->SetDefaultTTFont('fireflysung.ttf');  //works //event using otf font works with correct path setting //$plot->SetTitle("符合與其他可能",'font/fireflysung.ttf'); //works /*  // all the failure //$plot->SetTTFPath("font\\"); //$plot->S