分页: 1 / 2

批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-27 15:23
rikhtdss

代码: 全选

#!/usr/bin/env python
#-*-coding:utf8 -*-
#filename: extswap.py

import os
from sys import argv
from glob import glob

if len(argv) < 2 or len(argv) >3 or not argv[1].startswith('-'):
    print '''输入错误!正确的语法为:

    extswap.py -option [path]

    -option     指定扩展名
    path        指定要修改的目录(可选,默认为当前目录)

    本程序可以将指定目录下的指定文件类型的扩展名进行大小写转换
    原因是某些网站只允许上传扩展名为小写的jpg、gif等文件。'''

else:
    ext_name = argv[1][1:]
    if len(argv) == 2:
        filepath = os.getcwd()
    else:
        if argv[-1].startswith('/'):  #判断是相对路径还是绝对路径
            filepath = argv[-1]
        else:
            filepath = os.getcwd() + os.sep + argv[-1]
   
    if filepath[-1] != os.sep:
        filepath += os.sep
    def fun(path):
        for fn in glob(path + '*'):
            if os.path.isdir(fn):
                fun(fn + os.sep)  #如果检测到子目录则递归执行
            else:
                if fn[-len(ext_name):] != ext_name:   #忽略不是指定扩展名的文件
                 continue
                realpath = os.path.dirname(os.path.abspath(fn))  #探测文件路径
                newfilename = os.path.basename(fn)[0:-len(ext_name)] +\
                ext_name.swapcase()   #组装新文件名,一定有更简单的办法,不过我现在还不知道:-(
                newfn = realpath + os.sep + newfilename
                os.rename(fn,newfn)
                print fn,'改名为:\n',newfn
    fun(filepath)
因为在某些网站上传图片时,打开文件对话框只显示扩展名为小写的文件,而我的数码相机生成的图片扩展名为大写的JPG,会导至找不到文件。当文件很多时,每一个都手工更改会很累。

正好这两天在鼓捣Python,于是就想用Python写个脚本实现自动改名。《简明》差不多快看完了,觉得还有很多必需的东西不明白,特别是标准库的说明,都是E文。大量Google以后终于弄出了这个能工作的脚本。

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-27 15:40
eexpress
● less /usr/bin/rename

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-27 15:44
leeaman
难得,我以为ee来推销perl进来反对的 :em04

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-27 16:40
eexpress
我是帮助别人学习的。提供思路。
:em04
看过这rename再说。再说。

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-27 16:47
rikhtdss
我重新发明了轮子?
可惜我看不懂perl代码。。。

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-27 18:15
ly50247
find -name "*.JPG"|xargs rename JPG jpg

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2010-12-28 16:40
lilydjwg
man rename 写了: To translate uppercase names to lower, you'd use

rename 'y/A-Z/a-z/' *

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-01-13 20:28
ChenFengyuan
eexpress 写了:我是帮助别人学习的。提供思路。
:em04
看过这rename再说。再说。
其他脚本对于perl-rename来说都是浮云,lol
可以比较下 :em11

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-01-13 20:48
HuntXu
rikhtdss 写了:我重新发明了轮子?
可惜我看不懂perl代码。。。
不,轮子起码是圆的...

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-05-27 20:15
ooinzaghi
楼主这个脚本很实用,要是支持直接一键把所有大写改成小写就好了。windows不区分大小写的毛病把我害惨了 :em20 :em20

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-05-27 20:51
lilydjwg
ooinzaghi 写了:楼主这个脚本很实用,要是支持直接一键把所有大写改成小写就好了。windows不区分大小写的毛病把我害惨了 :em20 :em20
Nautilus 用户的话可以使用用户脚本的,选中后右键里点两下就可以了。
[bash]
#!/bin/bash

for i in $@
do
rename 'y/A-Z/a-z/' "$i"
done
[/bash]

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-05-27 23:43
ooinzaghi
选中后右键里点两下就可以了
求详解 :em06

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-05-28 13:14
lilydjwg
ooinzaghi 写了:
选中后右键里点两下就可以了
求详解 :em06
nautilus.png

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2011-05-28 19:28
ooinzaghi
感谢楼上,已经成功了 :em11

Re: 批量转换文件扩展名大小写的python脚本

发表于 : 2012-06-04 22:33
tang.zhe
感谢7楼!