用Python高效地移动文件

最近下载了一个Win7的壁纸包,解压一看,主目录是win7walls,下面是以国家为名的二十多个文件夹,每个文件夹中是以数字1,2,3为名称的jpg文件。因为这样的分布不可以使用Win7的自动换壁纸功能,所以我想把它们都移动到主目录Win7walls下面,但又不能直接剪切,因为基本上都重名。这时我又想到了Python

 

os.walk对于遍历子目录极其方便。

 

import os root = 'e:/pictures/win7walls' #下面的目录如Australia、US a=os.walk(root) for x in a: if len(x[-1])>0 and '.jpg' in x[-1][0]: #分离出最后一级目录名,如Australia pre=os.path.basename(x[0]) for j in x[-1]: #将Australia/1.jpg生成新的文件名Australia_1.jpg #再将win7walls/Australia/1.jpg移动到 #win7walls/Australia_1.jpg,注意没有使用 #shutil.move,因为它是基于复制的,同盘的移动文件 #效率很低,而os.rename对于同盘文件的移动相当快 #其实它就是更改了一下文件属性 os.rename(x[0]+'/'+j, root+'/'+pre+'_'+j)


PS: 2014-12-12

5年后的今天,因为要写一个脚本,列出5000多个分散的DICOM的信息,然后按每4GB一批打包到ISO文件中。又找到我上面的这篇文章。现在看当时这文章一是没突出题目,主要介绍了os.walk的用法,二是细节没说清楚。

这里再补充几点:

os.rename的确很快,但它有两点要注意:

1. 目标文件夹不能够已经存在,否则会报错。

2. 目标文件夹的父目录需要全部存在,否则会报错,举例:

要把D:\AA\BB\CC.TXT移动到D:\EE\DD\CC.TXT,那么需要已经存在D:\EE\DD目录,不存在就需要建立,

这里推荐用os.mkdirs来递归建立目录,很方便。

3. 它只是同盘移动快,不同盘还是用复制。好在现在我分区一般就分个C和D,多大的硬盘都这样。

你可能感兴趣的:(python,高效,移动文件)