文章目录

  • 引言
    • 来自图片处理的需求:
    • 解决方案:
  • 脚本使用方法:
    • 1.安装python 3
    • 2.新建一个TXT文件,拷入下面代码后保存,并将后缀名改为".py"
    • 3.按使用说明运行脚本
  • 心得总结

引言

注意:后来我发现了一个PC端的选图神器“FastStone Image Viewer”,用它查看Raw原图时,它显示的是文件里内嵌的JPG快照所以加载速度很快,这两年除了让朋友远程选图我已经很少再用这个脚本。

不过它还是能用于一些新旧不同后缀名文件对比整理的场合,比如某项目的图标资源包要逐步从JPG换成PNG,每次增加几个新的图片换个路径放进资源包后,可以用这个脚本把旧图片自动找出来删掉。就是里面表征前后两种文件名后缀的常量字符串需要替换一下。

来自图片处理的需求:

喜欢摄影的都懂,修图之前的选图也很麻烦,尤其是当原图体积太大时,挑图片时电脑反应会比较迟钝,而且远程选图时传RAW原图让别人选即麻烦又不用户友好,所以选片时有时需要用缩图后的jpg文件(快照)。

但基于选好的快照去找原图又很麻烦,要一张一张找,一不小心就盯错行。

解决方案:

所以花了好半天功夫写了这个脚本:

  • 把挑好的快照文件放进文件夹,运行脚本之后,所有没有对应快照的源文件会被放进一个叫“files to delete”的子文件夹,有快照的源文件仍留在原地。这样后续的文件管理就比较好办了。

脚本使用方法:

1.安装python 3

  1. 官网下载python3.0系列(https://www.python.org)

  2. 下载3.0以上的任意版本的“Windows x86 web-based installer”并进行安装

2.新建一个TXT文件,拷入下面代码后保存,并将后缀名改为".py"

代码:

#!/usr/bin/ env python
#coding=UTF-8import os, shutil
import sys#***************  脚本说明: ***************
#脚本作用是以文件名和后缀类型为判断依据,把没有快照文件的文件移动到待删除目录,不会直接删文件
#不支持文件名相同但内容不同的情况
#对脚本所在文件夹内的所有嵌套子目录生效#***************  使用方法: *************** by:BryanGG
# 环境要求:Windows + 已经安装3.0及以上版本的python
# 1.把本脚本放在待整理文件的同级或父文件夹内
# 2.根据需要修改脚本内的文件名后缀常量(注意是大小写敏感的):
#   fileToKeep = ".jpg" #快照文件后缀
#   fileToDel = ".CR2"   #源文件文件后缀
# 3.用格式转换软件把源文件转换成快照,保证其文件名相同后缀不同,放进脚本所在文件夹内
# 4.删除不需要的快照
# 5.用python集成进鼠标右键的“Edit with IDLE”打开脚本,按F5运行delNum = 0
keepNum = 0#函数shouldDel:若待某删类型的文件在字典里找不到对应快照,则返回True
def shouldDel(fileName, dictName, echoOn, countOn):global delNumglobal keepNumportion = os.path.splitext(fileName)if(fileToDel == portion[1]):#若后缀名是待删类型        fileToFind = portion[0]+fileToKeep #把后缀名换成快照类型if fileToFind not in dictName.keys(): #若在字典里找不到该快照if echoOn:print ("待删除->> ", fileName)if countOn:delNum += 1return Trueelse:            if echoOn:print ("保留:", fileName)if countOn:keepNum += 1return Falseelse:return FalsefilePath = os.getcwd()  #将脚本目录设为运行入口
fileToKeep = ".jpg" #快照文件后缀
fileToDel = ".CR2"   #源文件文件后缀
delDirName = "files to delete"  #存放待删除文件的文件夹print ("当前目录是", filePath)
delDirPath = os.path.join(filePath, delDirName)
if not os.path.exists(delDirPath):print ("不存在[", delDirName, "]文件夹,创建")os.makedirs(delDirPath)
else:print('[',delDirName,']文件夹已存在')#遍历并将所有文件名存入字典
dict1={} #字典
for root, dirs, files in os.walk(filePath):print("List: ",root)dirFileNum = 0for fName in files:print("\t: "+ fName)dirFileNum += 1dict1[fName] = os.path.join(root, fName) #key:文件名;value:全路径print ("共", dirFileNum, "个文件\n")print ("-----------------------------------------------------------\n")#方法一:重新遍历,根据字典判断是否要移动
for root, dirs, files in os.walk(filePath):print("****处理Dir: ",root)for fName in files:notInDelDir = not(delDirPath == root)if shouldDel(fName, dict1, True, notInDelDir):            if (notInDelDir):#如果不在待删除文件夹内try:shutil.move(dict1[fName], delDirPath)except :错误标题 = str( sys.exc_info()[0] );错误细节 = str( sys.exc_info() );print("遇到【" + 错误标题 + "】错误。细节:" + 错误细节);else:pass            else: #如果在待删除文件夹内,则什么也不做passprint ("共移动 ", delNum, "个文件")print ("共保留",keepNum, "个文件\n\n")#方法二:更高性能的遍历,但会乱序
'''
for k,v in dict1.items(): #用字典固有的遍历方法重新遍历
'''

3.按使用说明运行脚本

环境要求:Windows + 已经安装3.0及以上版本的python
1.把本脚本放在待整理文件的同级或父文件夹内
2.根据需要修改脚本内的文件名后缀常量(注意是大小写敏感的):
fileToKeep = “.jpg” #快照文件后缀
fileToDel = “.CR2” #源文件文件后缀
3.用格式转换软件把源文件转换成快照,保证其文件名相同后缀不同,放进脚本所在文件夹内
4.删除不需要的快照
5.用python集成进鼠标右键的“Edit with IDLE”打开脚本,按F5运行

心得总结

  • 要是已经太久没写脚本,将会:实际耗时 = (预计耗时 * 3) (:з」∠)
  • python2对中文路径的支持不好,比如os.walk的值print出去是乱码,用unicode函数转换有时又会抛异常
  • 文件名遍历进字典后会乱序,虽说用sorted函数可以对字典排序,但输出的是一个LIst,失去了用字典的意义
  • 用shutil.move前要判断一下是不是src就在dst里,否则会抛异常
  • 函数里用全局变量前要用global声明一下
  • 函数的定义要写在使用前
  • 无类型的基本变量类型的参数在python函数里是值传递,list、字典之类的带类型的参数在函数里是引用传递
  • os.path.splitext()可以分离出文件后缀名
  • os.path.basename(filePath)获取某路径的最后一级目录名
  • os.path.join()可以用来生成文件的全路径名
  • os.walk()可用来遍历文件夹内的所有文件
  • try语句里的else分支表示无异常的情况

摄影师选图脚本(根据快照文件的存在与否整理原文件)相关推荐

  1. python压缩文件为zip-python 压缩文件为zip后删除原文件

    压缩.log 文件为zip后删除原文件 需要注意:本人作为小白,该脚本需要和.log在一起,后面有时间需要改正. #!/usr/local/python/bin/python #-*-coding=u ...

  2. win11在dev渠道升级怎么保留原来的文件 windows11渠道升级保留原文件的方法步骤

    有网友想给自己的电脑升级win11系统体验,但是不知道升级win11系统会保留原来的文件吗?担心自己电脑的文件受损或丢失.下面小编就给大家解答下电脑升级win11系统是否会保留原来的文件. 更多win ...

  3. linux sed i 大文件,sed -i   修改链接文件注意事项   破坏了原文件

    因为sed -i /etc/sysconfig/selinux(selinux文件是/etc/selinux/config的软链接)配置文件重启SELINUX没有关闭,才发现原来sed -i是不能直接 ...

  4. linux文件编辑命令详细整理,Linux文件编辑命令vi详细说明

    目录 1.引言 2.vi命令与vim命令 3.vi命令使用 3.1一般模式 3.2编辑模式(重点) 3.3命令行模式 1.引言 相信有很多程序员朋友,在长时间不操作linux系统或者初学linux命令 ...

  5. 在浏览器端调试代码并直接修改原文件、移动端虚拟键盘中实现搜索按钮

    在浏览器端调试代码并直接修改原文件: 此调试方法可以避免在浏览器调试完代码后在到原文件手动修改代码的弊端,其具体方法如下: 1.先将要调试的页面在浏览器(Google)打开,这里小编打开桌面test文 ...

  6. Linux常用命令(本篇包括,Linux目录结构介绍、Linux Shell介绍、9个常见命令介绍、文件的概念、文件的操作(20个)、目录的操作、文件和目录的权限、文件压缩及解压缩)

    Linux常用命令(本篇包括,Linux目录结构介绍.Linux Shell介绍.9个常见命令介绍.文件的概念.文件的操作(20个).目录的操作.文件和目录的权限.文件压缩及解压缩)         ...

  7. java 文件拷贝文件怎么打开_java如何拷贝文件

    /*** 复制单个文件 *@paramoldPath String 原文件路径 如:c:/fqf.txt *@paramnewPath String 复制后路径 如:f:/fqf.txt *@retu ...

  8. office文件已损坏 该服务器,Office文件可能已损坏处理方法

    试图打开的文件可能已损坏.Microsoft Office 程序可以让您试着从损坏的文件中恢复文字,或者如果恢复的文件无法使用,那么您可以删除损坏的文件,然后打开备份. 1.如果所使用的 Micros ...

  9. HDFS重复上传文件将会覆盖原文件

    HDFS重复上传文件,将会覆盖原文件.

最新文章

  1. windows和linux双系统引导问题
  2. Hyper-V常用问题解惑
  3. 百度超级链Xuper关于金额相关问题
  4. 不能调试的问题的解决
  5. 英文操作系统下WebBrowser控件无法显示本地页面的解决方法
  6. centos mysql php tomcat_CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
  7. 微信公众号通过链接实现关注(盗用广告主流量主)
  8. 嵌入式系统——RS232和RS449
  9. git客户端下载地址
  10. 爬虫入门到精通-headers的详细讲解(模拟登录知乎)
  11. 如何把 json对象转换成 数组
  12. 一切皆是文件:UNIX,Linux 操作系統的設計哲學
  13. PyQt: 拖放事件(Drag Drop)
  14. VUE博客模板----FXBLOG
  15. python3 云词(wordcloud)安装失败解决方案
  16. android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...
  17. #10064. 「一本通 3.1 例 1」黑暗城堡
  18. 什么是SVG及使用方式
  19. 修建道路(最小生成树)
  20. html中加水印,静态html页面 添加水印效果 且 水印不可复制

热门文章

  1. 河南2021全国计算机二级报名时间,2021年3月河南计算机二级报名时间|网上报名入口【已开通】...
  2. springboot 中使用redis 01
  3. MEM/MBA 考研高频单词总结(09)
  4. ffmpeg h264解码器提取
  5. 解决MAC下应用程序“IntelliJ IDEA”无法打开(JetBrains全家桶同理)
  6. 【JTAG】ICL PDL详解
  7. 【生活工作经验 四】互联网社招求职攻略
  8. 麦子钱包插件版升级支持Conflux网络
  9. 【复习回顾、继承、抽象类、模板设计模式】
  10. 10.RabbitMQ