手机使用python操作图片文件

起因

前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找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参数设置为20171012.

运行代码:



之后会发现指定的文件已经在trash目录了,



3.之后就可以执行delete方法删除了.

结语

到此为止,教程就这结束了,本来打算写成多线程版的提提速来着结果发现好像手机没反应,所以最好还是使用循环操作文件了,这里只是提供这么一个思路,代码没什么难度。关键是看用途,怎么样你学会了么。

下面是完整代码

# -*- coding: utf-8 -*-
# @Time : 2019-02-15 13:31
# @Author : cxa
# @File : moveimagetotrash.py
# @Software: PyCharm
import glob
import pathlib
import os
import datetime
import shutil '''
1.指定文件下的图片获取创建日期
2.执行start方法,参数
将获取的这些文件移动到一个当前目下的新建文件trash里面
3.为了防止误删,去trash目录先确认下文件是否需要确认删除。如果确认看第4步
4.确认无误执行delete方法,具体参数解释看方法内部
''' def to_str_path(path):
if path:
new_path = os.fspath(path)
return new_path def move_file(image_path, date_str, trash_dir):
file_time = os.path.getctime(image_path)
stamp_to_datetime = datetime.datetime.fromtimestamp(file_time)
file_date = datetime.datetime.strftime(stamp_to_datetime, "%Y%m%d")
if file_date == date_str:
jpg_dir_path, jpg_name = os.path.split(image_path)
if not os.path.exists(to_str_path(trash_dir)):
os.makedirs(to_str_path(trash_dir))
os.rename(image_path, to_str_path(trash_dir.joinpath(jpg_name))) # 移动文件或重命名,这里是移动文件
print(f"{jpg_name}已经移动到当前目录的trash目录") def start(filename: str = None, date_str: str = "20190215", filetype: str = "jpg"):
''' :param filename: 指定文件夹名,默认当前py文件所在的文件夹
:param date_str: 删除日期格式yyyymmdd
:param filetype: 需要删除的文件类型默认jpg.
:return: None
''' filename = filename or __file__
dir_path = pathlib.Path(filename).resolve().parent
trash_dir = dir_path.joinpath("trash")
image_path_list = glob.glob(to_str_path(dir_path.joinpath(f"*.{filetype}")))
for image_path in image_path_list:
move_file(image_path, date_str=date_str, trash_dir=trash_dir) def remove(file, trash_path):
os.remove(os.path.join(trash_path, file))
print(f"成功删除文件,{file}") def delete(del_type: str = "", filename: str = None):
''' :param del_type:删除trash文件夹的文件,还是删除整个trash文件夹
:param filename: trash文件路径的文件夹名
:return:
'''
filename = filename or __file__
dir_path = pathlib.Path(filename).resolve().parent
trash_path = to_str_path(dir_path.joinpath("trash")) if del_type == "dir":
shutil.rmtree(trash_path) # 递归删除一个目录以及目录内的所有内容
else:
if os.path.exists(trash_path):
file_list = os.listdir(trash_path)
for file in file_list:
remove(file, trash_path=trash_path) else:
print("找不到要删除的文件夹!") if __name__ == '__main__':
start(date_str="20190217")
#delete("dir")

以下为多线程版本手机使用还有问题

# -*- coding: utf-8 -*-
# @Time : 2019-02-15 13:31
# @Author : cxa
# @File : moveimagetotrash.py
# @Software: PyCharm
import glob
import pathlib
import os
import datetime
import shutil
from concurrent import futures
from functools import partial '''
1.指定文件下的图片获取创建日期
2.执行start方法,参数
将获取的这些文件移动到一个当前目下的新建文件trash里面
3.为了防止误删,去trash目录先确认下文件是否需要确认删除。如果确认看第4步
4.确认无误执行delete方法,具体参数解释看方法内部
''' def start_thread(func, l: list):
with futures.ThreadPoolExecutor(max_workers=10) as executor:
executor.map(func, l) def to_str_path(path):
if path:
new_path = os.fspath(path)
return new_path def move_file(image_path, date_str, trash_dir):
file_time = os.path.getctime(image_path)
stamp_to_datetime = datetime.datetime.fromtimestamp(file_time)
file_date = datetime.datetime.strftime(stamp_to_datetime, "%Y%m%d")
if file_date == date_str:
jpg_dir_path, jpg_name = os.path.split(image_path)
if not os.path.exists(to_str_path(trash_dir)):
os.makedirs(to_str_path(trash_dir))
os.rename(image_path, to_str_path(trash_dir.joinpath(jpg_name))) # 移动文件或重命名,这里是移动文件
print(f"{jpg_name}已经移动到当前目录的trash目录") def start(filename: str = None, date_str: str = "20190215", filetype: str = "jpg"):
''' :param filename: 指定文件夹名,默认当前py文件所在的文件夹
:param date_str: 删除日期格式yyyymmdd
:param filetype: 需要删除的文件类型默认jpg.
:return: None
''' filename = filename or __file__
dir_path = pathlib.Path(filename).resolve().parent
trash_dir = dir_path.joinpath("trash")
image_path_list = glob.glob(to_str_path(dir_path.joinpath(f"*.{filetype}")))
print(image_path_list)
move_f = partial(move_file, date_str=date_str, trash_dir=trash_dir)
start_thread(move_f, image_path_list) def remove(file, trash_path):
os.remove(os.path.join(trash_path, file))
print(f"成功删除文件,{file}") def delete(del_type: str = "", filename: str = None):
''' :param del_type:删除trash文件夹的文件,还是删除整个trash文件夹
:param filename: trash文件路径的文件夹名
:return:
'''
filename = filename or __file__
dir_path = pathlib.Path(filename).resolve().parent
trash_path = to_str_path(dir_path.joinpath("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) else:
print("找不到要删除的文件夹!") if __name__ == '__main__':
start()
# delete("dir")

python 指定日期图片文件删除的更多相关文章

  1. Linux下查找指定日期的文件

    一.背景 Linux服务器的一个目录里,每天产生海量的文件.为了防止磁盘被写满. 决定每天删除部分老文件.OK,问题来了,如何过滤出指定日期的文件? 二.强大的Linux 一行代码搞定: ls --f ...

  2. Linux备份-删除指定日期内文件

    #!/usr/bin/env bash source /etc/profile echo " *************** start filter ***************  &q ...

  3. while read line 查找指定日期的文件夹

    #!/bin/bash dir=/root/tmp targetdir=/root/tmp/tmp filenametxt=/tmp/filename.txt commandtxt=/tmp/comm ...

  4. python指定日期后加几天判断

    #!/usr/bin/python import datetime import sys arg1_list=list(sys.argv[1].split(',')) arg2_list=list(s ...

  5. python之删除指定目录指定日期下的日志文件

    #=======================================================================================20190521以下脚本 ...

  6. 【Linux】linux中删除指定日期之前的文件

    要删除系统中就的备份文件,就需要使用命令了: #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30 ...

  7. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  8. python selenium截取指定元素图片

    1.截取当前屏幕 @property def getImage(self): ''' 截取图片,并保存在images文件夹 :return: 无 ''' timestrmap = time.strft ...

  9. cmd/bat 判断日期,并删除文件

    代码来自互联网. ---------------------------------------- @echo off set a=2018-07-9 set ndate=%date:~,10%set ...

随机推荐

  1. Kubernetes 集群ca验证

    创建集群时跳过ca验证 # vim /etc/kubernetes/apiserver 去除KUBE_ADMISSION_CONTROL中的 SecurityContextDeny,ServiceAc ...

  2. OS + Windows 10 / office excel vlookup / CredSSP

    s https://support.microsoft.com/zh-cn/help/10749/windows-10-find-product-key 查找 Windows 7 或 Windows ...

  3. python遇到的知识点

    python遇到的知识点,记录一下.方便学习. 文件相关操作 查了资料,关于open()的mode参数: 'r':读 'w':写 'a':追加 'r+' == r+w(可读可写,文件若不存在就报错(I ...

  4. angular学习一框架结构认识

    angular学习所有内容均会与vue以及react框架进行对比. angular学习使用的编译器:webstorm 解决编译器屏蔽node_modules包问题: File-->setting ...

  5. OPC和DCOM配置

    本文为Java实现OPC通信的一部分 系统:使用win10 64位专业版 PDF文件: 本文,链接:  百度网盘 密码: reht, Win7和Win7_SP1网络OPC配置,链接:  百度网盘 密码 ...

  6. 【leetcode-102,107,103】 二叉树的层次遍历

    102. 二叉树的层次遍历 (1过,隐蔽错误花时间很多,简单题目本应很快,下次注意红色错误的地方) 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: ...

  7. 如何转换cdr文件

    You will need to copy the type library from corelDRAW: C:\Program Files (x86)\Corel\CorelDRAW Graphi ...

  8. GNU Screen Usage

    分屏: 1.在终端输入screen命令 2.Ctrl+a 然后shift+s 上下分屏,切换到下方Ctrl+a tab然后新建一个window(Ctrl+a c) 3.切换到上方,Ctrl+a tab ...

  9. 12个实用的 JavaScript 框架分享给前端开发者

    JavaScript库是预先编写的 JavaScript 工具代码,让开发者可以更容易开发 JavaScript 应用.这个列表我们列出了2017年1月份功能丰富的 JavaScript 库,可以帮助 ...

  10. electron-vue:Vue.js 开发 Electron 桌面应用

    相信很多同学都知道 Electron 可以帮助开发人员使用前端技术开发桌面客户端应用,今天介绍的 electron-vue 框架是一套基于 Vue.js 开发 Electron 桌面应用的脚手架,该项 ...