用python操作文件和文件夹
我有一堆层级3到4级的文件夹,这里面存有的一些文件是我需要的,一些是我不需要的。需要的文件都存储在名字中有'Data'的文件夹内。现在我需要把这些文件提取(拷贝)到一个指定的文件夹里。
一个文件夹一个文件夹去点开是一种方法,但是对于层级比较深的文件夹是一件很枯燥的事情。
本着一切尽量自动化的原则,我用python来做这件事情。
这个需求归纳下来需要:
- 从一个起始目录开始
- 遍历每一个文件夹
- 如果文件夹的名字中有'Data',拷贝它的内容至目标文件夹
python对文件、文件夹的操作是非常常见的需求,学会使用它们可以对付很多类似的批量处理文件的工作。
我们用到的package有两个:
- os
- subprocess
用到的函数是
-
os
- os.listdir() 返回当前目录下的所有文件和文件夹名称
- os.path.isfile() 判断某个名称是不是文件
- os.path.isdir() 判断某个名称是不是文件夹
- os.chdir() 修改当前工作目录,可以是绝对地址("C:\dir_a\dir_b"),或相对地址("dir_a")
-
subprocess
- subprocess.call( " ", shell=True) ""里填入需要执行的命令行命令,相当于在命令行窗口直接执行这个命令
了解了这些函数后,放出代码。注意IterCopyDocs是一个迭代函数,自己调用自己,目的是模拟对目录的遍历。
import subprocess import os def IterCopyDocs(dstPath): ids = os.listdir() for id in ids: if os.path.isdir(id): if 'Data' in id: os.chdir(id) pics = os.listdir() for pic in pics: if os.path.isfile(pic): print("copy \""+pic+"\" "+dstPath) subprocess.call("copy \""+pic+"\" "+dstPath, shell=True) os.chdir('..\\') else: os.chdir(id) IterCopyDocs(dstPath) os.chdir('..\\') subprocess.call("dir", shell=True) root_dir = "C:\\Users\\Administrator\\Downloads" dst_dir = "C:\\Users\\Administrator\\Downloads" os.chdir(root_dir) # root directory of data IterCopyDocs(dst_dir) # destination directory
(完)