对某个文件夹中的文件重命名的时候,发现有些文件丢失,代码如下:

#coding=gbk  

# Findthe every dir, if 01.rm exist in it, then rename it.
#!/usr/bin/python '''''
Utilitiesof file & directories.
''' import os
import re
import string
import time # Get theall files & directories in the specified directory (path).
def get_recursive_file_list(path):
current_files = os.listdir(path)
all_files = []
for file_name in current_files:
full_file_name = os.path.join(path,file_name)
all_files.append(full_file_name) if os.path.isdir(full_file_name):
next_level_files =get_recursive_file_list(full_file_name)
all_files.extend(next_level_files) return all_files def need_rename(filename):
if not os.path.isfile(filename):
return False base_filename = os.path.basename(filename)
pattern = re.compile("^[\d]{1,3}.jpeg$")
if pattern.match(base_filename):
#print base_filename
return True
else:
print "no"
return False def rename(filename):
old_filename = filename base_filename = os.path.basename(filename)
dir_name = os.path.dirname(filename)
#print "%s ----------- %s" % (dir_name, base_filename) #story_name = os.path.basename(dir_name)
#print "story name: ", story_name #new_filename = os.path.join(dir_name, story_name[3:] + " " + base_filename)
AllName = filename.split('/')[-1]
digit = AllName.split('.')[0]
newDigit = string.atoi(digit)-4 new_filename = dir_name + "/" +str(newDigit)+".jpeg"
#os.rename(old_filename, new_filename)
#os.system("mv "+old_filename +" "+ new_filename)
time.sleep(3)
print "%s ==> %s" % (old_filename, new_filename)
def numeric_compare(x, y):
xAllName = x.split('/')[-1]
xdigit = xAllName.split('.')[0]
yAllName = y.split('/')[-1]
ydigit = yAllName.split('.')[0]
return string.atoi(xdigit) - string.atoi(ydigit)
top_dir = "/mnt/tishare/web/pdf/1125"
all_files = get_recursive_file_list(top_dir)
flag=True
print(sorted(all_files))
#print(sorted(all_files, cmp=numeric_compare))
for file in all_files:
if flag:
os.chdir(top_dir)
flag=False
if not need_rename(file):
continue
rename(file)

出错的代码标红,打印出发现其列表为:

['/mnt/tishare/web/pdf/1125/10.jpeg', '/mnt/tishare/web/pdf/1125/11.jpeg', '/mnt/tishare/web/pdf/1125/12.jpeg',
'/mnt/tishare/web/pdf/1125/13.jpeg', '/mnt/tishare/web/pdf/1125/14.jpeg', '/mnt/tishare/web/pdf/1125/4.jpeg',
'/mnt/tishare/web/pdf/1125/5.jpeg', '/mnt/tishare/web/pdf/1125/6.jpeg', '/mnt/tishare/web/pdf/1125/7.jpeg',
'/mnt/tishare/web/pdf/1125/8.jpeg', '/mnt/tishare/web/pdf/1125/9.jpeg']

也就是说其排序有问题,先输出的/mnt/tishare/web/pdf/1125/10.jpeg,其修改为/mnt/tishare/web/pdf/1125/6.jpeg,发现其已经存在,然后造成/mnt/tishare/web/pdf/1125/6.jpeg文件丢失。自定义排序函数,在python2.x中cmp参数指定的函数用来进行元素间的比较。我们在其上自定义numeric_compare排序函数,并使用之,然后就不会出现问题了:

['/mnt/tishare/web/pdf/1125/4.jpeg',
'/mnt/tishare/web/pdf/1125/5.jpeg', '/mnt/tishare/web/pdf/1125/6.jpeg', '/mnt/tishare/web/pdf/1125/7.jpeg',
'/mnt/tishare/web/pdf/1125/8.jpeg', '/mnt/tishare/web/pdf/1125/9.jpeg','/mnt/tishare/web/pdf/1125/10.jpeg',
'/mnt/tishare/web/pdf/1125/11.jpeg', '/mnt/tishare/web/pdf/1125/12.jpeg',
'/mnt/tishare/web/pdf/1125/13.jpeg', '/mnt/tishare/web/pdf/1125/14.jpeg']

然后重命名文件就没有问题了。

参考:

http://www.jb51.net/article/57678.htm

http://blog.csdn.net/a_flying_bird/article/details/24116907

python排序出现的问题以及解决方案的更多相关文章

  1. python排序之二冒泡排序法

    python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...

  2. python排序之一插入排序

    python排序之一插入排序 首先什么是插入排序,个人理解就是拿队列中的一个元素与其之前的元素一一做比较交根据大小换位置的过程好了我们先来看看代码 首先就是一个无序的列表先打印它好让排序后有对比效果, ...

  3. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  4. python排序算法实现(冒泡、选择、插入)

    python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...

  5. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  6. 44.python排序算法(冒泡+选择)

    一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...

  7. Python排序搜索基本算法之归并排序实例分析

    Python排序搜索基本算法之归并排序实例分析 本文实例讲述了Python排序搜索基本算法之归并排序.分享给大家供大家参考,具体如下: 归并排序最令人兴奋的特点是:不论输入是什么样的,它对N个元素的序 ...

  8. python 排序算法总结及实例详解

    python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...

  9. /var/lib/gems/2.5.0/gems/seccomp-tools-1.3.0/lib/seccomp-tools/dumper.rb:125: warning: Insecure world writable dir /home/python/.local in PATH, mode 040777 解决方案

    /var/lib/gems/2.5.0/gems/seccomp-tools-1.3.0/lib/seccomp-tools/dumper.rb:125: warning: Insecure worl ...

随机推荐

  1. PR2017添加字幕文本或文字水印

    1.新建一个文本图层(先点击下右下方区域,避免新建图层是灰色不可用) 2.可以看到已经新建了一个文本图层,然后可以在效果控件修改属性,可以用文字工具在文字的地方进行修改文本.(注意点击T图标才能编辑文 ...

  2. [AH2017/HNOI2017]礼物

    题解: 水题 化简一波式子会发现就是个二次函数再加上一个常数 而只有常数中的-2sigma(xiyi)是随移动而变化的 所以只要o(1)求出二次函数最大值然后搞出sigma(xiyi)就可以了 这个东 ...

  3. Codeforces 160D Edges in MST tarjan找桥

    Edges in MST 在用克鲁斯卡尔求MST的时候, 每个权值的边分为一类, 然后将每类的图建出来, 那些桥就是必须有的, 不是桥就不是必须有. #include<bits/stdc++.h ...

  4. 074 hbase与mapreduce集成

    一:运行给定的案例 1.获取jar包里的方法 2.运行hbase自带的mapreduce程序 lib/hbase-server-0.98.6-hadoop2.jar 3.具体运行 注意命令:mapre ...

  5. pandas.cut使用总结

    用途 pandas.cut用来把一组数据分割成离散的区间.比如有一组年龄数据,可以使用pandas.cut将年龄数据分割成不同的年龄段并打上标签. 原型 pandas.cut(x, bins, rig ...

  6. List实体去重

    public static ArrayList<Room> removeDuplicate(List<Room> room) { Set<Room> set = n ...

  7. mac 回车键、空格键失灵(非物理原因)解决方法

    1.关机2.按住shift+control+option+开关机键,大概10秒左右,观察键盘电源灯是否变色,确定是否硬件故障,不变色表正常.3.先按下开关机键后,放开.然后同时按住option+com ...

  8. springboot mail+Thymeleaf模板

    compile 'org.springframework.boot:spring-boot-starter-thymeleaf' compile 'io.ratpack:ratpack-thymele ...

  9. i春秋 “百度杯”CTF比赛 十月场 web题 Backdoor

    0x00: 打开题目,题目中告诉我们这题是文件泄露. 0x01: 通过扫描目录,发现可以扫到的有3个文件 index.php flag.php robots.txt 但是浏览flag.php它告诉我们 ...

  10. OSINT系列:威胁信息挖掘ThreatMiner

     OSINT系列:威胁信息挖掘ThreatMiner   ThreatMiner.org是一个非营利性组织.它收集各种开放的网络信息和安全信息,然后进行整理,供安全人员检索.它可以提供六大类.十八小类 ...