python小應用之整理手機圖片

  • 2019 年 11 月 15 日
  • 筆記

起因

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

準備工具

首先你得有個手機,233(和沒說一樣),咳咳 說正經的,既然我要在手機上運行python了,這裡我推薦pydroid3,因為程式碼是基於python3.6寫的(f-string的使用) 為了方便大家下載,我給大家提供了百度雲下載的地址:後台回復:pydroid即可。

安裝打開之後這個樣子

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

思路

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

程式碼實現

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

import pathlib  dir_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 glob  image_path_list = glob.glob(to_str_path(dir_path.joinpath("*.jpg")))

之前說獲取的路徑是對象所以to_str_path是一個轉換成字元串路徑的方法。 *.jpg可以匹配所以後綴為jpg的文件生產結果列表。

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

import os  file_time = os.path.getctime(image_path)

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

import os  os.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參數設置為20171227. 運行程式碼:

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

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

結語

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