Python通过写文件的形式做到拷贝的功能,而文件删除则可以用remove,或者空目录删除用removedirs,rmdir。
由于最近遇到了文件拷贝和删除的问题,发现Python提供的这几个方法都不够方便:
1、不能以命令的形式拷贝文件;
2、不能删除一个非空的目录。
那么怎么解决呢?
还是使用OS的Shell吧。
以Windows为例:
拷贝使用xcopy /s /y /q sourcepath destpath
删除呢?写了个删除整个目录的代码:
1 import os
2 import re
3
4 def DelSameFolder(dir, folder_name):
5 """
6 删除某一目录下具有相同名称的非空子目录
7 """
8 pattern = "^" + folder_name + "$"
9 for li in os.listdir(dir):
10 if re.search(pattern, li):
11 delfolder = os.path.join(dir, li)
12 commandline = "rd /S /Q \"" + delfolder + "\""
13 os.system(commandline)
14 newdir = os.listdir(dir)
15 foldersdir = [os.path.join(dir, li) for li in newdir if len(li.split('.'))<2]
16 for li in foldersdir:
17 DelSameFolder(li, folder_name)
2 import re
3
4 def DelSameFolder(dir, folder_name):
5 """
6 删除某一目录下具有相同名称的非空子目录
7 """
8 pattern = "^" + folder_name + "$"
9 for li in os.listdir(dir):
10 if re.search(pattern, li):
11 delfolder = os.path.join(dir, li)
12 commandline = "rd /S /Q \"" + delfolder + "\""
13 os.system(commandline)
14 newdir = os.listdir(dir)
15 foldersdir = [os.path.join(dir, li) for li in newdir if len(li.split('.'))<2]
16 for li in foldersdir:
17 DelSameFolder(li, folder_name)
这段代码删除了某一目录下具有相同名字的所有子文件夹。当时的目的是为了删除项目文件中的CVS目录,由于手动删除工作需要一定的体力和耐力,因此懒人还是决定用懒办法——写代码。
怎么查找要删除的目标文件夹呢?使用了正则表达式。
怎样解决所有可能存在的子文件夹呢?递归。
为什么不先删除目标文件夹下的所有文件再删除这个空的目标文件夹呢?因为它下面可能还有很多非空的子文件夹,那又要递归了……逻辑变得复杂。
以上便简单的解决了目前的问题。