手機使用python操作圖片檔案

公號_python學習開發發表於2019-02-18

手機使用python操作圖片檔案

起因

前幾天去國圖拍了一本書,一本心理學方面的書,也許你問我為什麼不去買一本,或者去網上找pdf。 其實吧,關於心理學方面的書可以說在市面上一抓就是一堆,至於拍這本書兩個原因,一個是沒有什麼收藏價值不值得我去買,只適合應急用,然後就是這本書的作者寫作特點和其他大眾的不太一樣,可以說是有特點或者偏門,於是我就在手機上拍了一堆的圖片,後來整理成了pdf,但是昨天我看的時候原圖片檔案還在快上千了吧,一個一個選擇刪除真是刪煩了,
也許你會說為什麼不匯入到電腦上進行刪除,沒辦法我就是想整點不一樣的,學了python就是喜歡整點騷操作。(手動滑稽)
所以下面就在手機上使用python進行一波騷操作。。。

準備工具

首先你得有個手機,233(和沒說一樣),咳咳 說正經的,既然我要在手機上執行python了,這裡我推薦pydroid3,因為程式碼是基於python3.6寫的(f-string的使用)
為了方便大家下載,我給大家提供了百度雲下載的地址:
關注微信公眾號:python學習開發,然後後臺回覆關鍵字:pydroid即可。
安裝開啟之後這個樣子


剩下的就是執行程式碼了,這個後面我們再說.

思路

在做這件事之前我們得知道具體如何去做。
1.確定待處理圖片檔案所在目錄
2.然後確定要刪除哪些圖片,這裡我們以圖片建立日期為準進行篩選。
3.為了防止誤刪,安全起見在該資料夾裡建立一個trash目錄,首先把目標圖片移動到該資料夾,然後確認圖片可以刪除之後再進行刪除。就像不要輕易使用rm一樣,你懂得。給自己留一個反悔的時間。

程式碼實現

好了既然思路確定了我們就可以動手實現了。
1.確認檔案所在資料夾,這裡使用pathlib模組,pathlib是python3裡的一個標準庫,主要也是操作路徑,和os模組操作路徑比要說區別的話,就是拼接路徑有時候比較方便,最好的就是兩個配合著使用。好了下面上程式碼

import pathlibdir_path = pathlib.Path(filename).resolve().parent複製程式碼

resolve方法是獲取檔案執行時的目錄,parent是獲取上一級目錄,也就是圖片的所在資料夾
2.建立trash目錄,移動之後的圖片所在目錄。
思路分析中提到這個資料夾得作用就是類似垃圾箱可以確認後再刪除。

 trash_dir = dir_path.joinpath("trash")複製程式碼

我們可以通過joinpath方法進行拼接路徑,os.path.join()需要填二個引數,這裡只需要一個即可,這就是優勢。但是需要注意的是這個方法最終獲取的路徑是個物件不是字串
在後面的使用中需要轉換成字串形式的路徑.
3.接下來我們知道我們需要操作的檔案型別是圖片,這裡我以jpg為例,當然如果你的圖片是png你可以寫png,python3的標準庫提供了glob模組,這模組可以設定匹配規則去獲取需要匹配的圖片列表。

import globimage_path_list = glob.glob(to_str_path(dir_path.joinpath("*.jpg")))複製程式碼

之前說獲取的路徑是物件所以to_str_path是一個轉換成字串路徑的方法。
*.jpg可以匹配所以字尾為jpg的檔案生產結果列表。

4.檔案都獲取完了但是並不一定都是我們需要的,我們需要的指定日期內的檔案

import osfile_time = os.path.getctime(image_path)複製程式碼

通過getctime我們獲取了圖片建立時間,進行進一步篩選。
5.檔案都準備好了,我們就需要移動到trash目錄,等待處理了。
通過os模組的rename方法或者shutils的move方法可以對檔案進行移動,這裡我選擇os模組

import osos.rename("移動前完整檔案路徑", "移動後完整檔案路徑")複製程式碼

6.此時檔案就在trash目錄了。
然後確認完了就可以刪了,如果沒問題就執行delete方法.
這裡提供兩種刪除方式一種是刪除所有檔案,一種是整個資料夾都刪除,兩種唯一的區別就是下次不用建立trash目錄了,沒多大區別.

 if del_type == "dir":        shutil.rmtree(trash_path)  # 遞迴刪除一個目錄以及目錄內的所有內容    else:        if os.path.exists(trash_path):            file_list = os.listdir(trash_path)            if file_list:                remove_f = partial(remove, trash_path=trash_path)                start_thread(remove_f, file_list)複製程式碼

演示

首先確定需要整理的檔案在哪個目錄。
這裡用我之前的手機截圖目錄為例。這裡有個小問題就是,我怎麼知道我的截圖檔案在哪個目錄….
一般手機檢視圖片的時候都有個詳細資訊這裡面一般有路徑。向下面這樣。

通過圖片我們可以清楚的看到路徑在截圖資料夾裡,至此我們就確定了檔案的目錄。

然後為了方便我們就在需要操作的目錄裡執行python指令碼,開啟前面我們安裝的pydroid3
然後按照我的操作
1.將程式碼複製到下面的框裡


可以把newfile改個別的名字.
2.呼叫方法傳入引數
方法傳入日期引數格式例如20190101。
這裡以20171227為例執行程式碼。
在執行之後沒有結果,後來看了一眼圖片知道了,程式預設圖片格式是jpg,我的截圖都是png,所以我需要指定filetype引數為png,同是date_str引數設定為20171012.
執行程式碼:

之後會發現指定的檔案已經在trash目錄了,

3.之後就可以執行delete方法刪除了.

結語

到此為止,教程就這結束了,本來打算寫成多執行緒版的提提速來著結果發現好像手機沒反應,所以最好還是使用迴圈操作檔案了,這裡只是提供這麼一個思路,程式碼沒什麼難度。關鍵是看用途,怎麼樣你學會了麼。


完整程式碼請關注公眾號:python學習開發,然後找到同名檔案獲取。


相關文章