os.walk
os.walk()主要用来扫描某个指定目录下所包含的子目录和文件。这篇文章将通过几个简单的例子来说明python中os.walk()的使用方法。
假设我们的test文件夹有如下的目录结构,【可以在windows中通过tree /f
命令来查看目录的文件结构】
D:.
├─dir1
│ │ 1-1.txt
│ │ 1-2.txt
│ │
│ └─dir1-1
│ 1-1-1.txt
│
├─dir2
│ 2-1.txt
│ 2-2.txt
│
└─dir3
3-1.txt
3-2.txt
我们首先用os.walk
扫描test
文件夹下所有的子目录和文件:
import os
for curDir, dirs, files in os.walk("test"):
print("====================")
print("现在的目录:" + curDir)
print("该目录下包含的子目录:" + str(dirs))
print("该目录下包含的文件:" + str(files))
输出结果如下:
====================
现在的目录:D:/test/
该目录下包含的子目录:['dir1', 'dir2', 'dir3']
该目录下包含的文件:[]
====================
现在的目录:D:/test/dir1
该目录下包含的子目录:['dir1-1']
该目录下包含的文件:['1-1.txt', '1-2.txt']
====================
现在的目录:D:/test/dir1\dir1-1
该目录下包含的子目录:[]
该目录下包含的文件:['1-1-1.txt']
====================
现在的目录:D:/test/dir2
该目录下包含的子目录:[]
该目录下包含的文件:['2-1.txt', '2-2.txt']
====================
现在的目录:D:/test/dir3
该目录下包含的子目录:[]
该目录下包含的文件:['3-1.txt', '3-2.txt']
上面的代码在扫描子目录和文件的时候,是采用自顶向下的方式进行扫描。可以理解为是深度优先进行遍历。
如果想要自底向上地扫描子目录和文件,可以添加上topdown=False
参数:
# 使用os.walk自底向上扫描目录
import os
for curDir, dirs, files in os.walk("test", topdown=False):
print("====================")
print("现在的目录:" + curDir)
print("该目录下包含的子目录:" + str(dirs))
print("该目录下包含的文件:" + str(files))
输出结果如下:
现在的目录:D:/test/dir1\dir1-1
该目录下包含的子目录:[]
该目录下包含的文件:['1-1-1.txt']
====================
现在的目录:D:/test/dir1
该目录下包含的子目录:['dir1-1']
该目录下包含的文件:['1-1.txt', '1-2.txt']
====================
现在的目录:D:/test/dir2
该目录下包含的子目录:[]
该目录下包含的文件:['2-1.txt', '2-2.txt']
====================
现在的目录:D:/test/dir3
该目录下包含的子目录:[]
该目录下包含的文件:['3-1.txt', '3-2.txt']
====================
现在的目录:D:/test/
该目录下包含的子目录:['dir1', 'dir2', 'dir3']
该目录下包含的文件:[]
我们还可以利用os.walk
输出test
文件夹下所有的文件:
# 使用os.walk输出某个目录下的所有文件
import os
for curDir, dirs, files in os.walk("test"):
for file in files:
print(os.path.join(curDir, file))
输出结果如下:
D:/test\dir1\1-1.txt
D:/test\dir1\1-2.txt
D:/test\dir1\dir1-1\1-1-1.txt
D:/test\dir2\2-1.txt
D:/test\dir2\2-2.txt
D:/test\dir3\3-1.txt
D:/test\dir3\3-2.txt
也可以利用os.walk
输出test文件夹下指定后缀名(比如.txt)文件:
import os
for curDir, dirs, files in os.walk("D:/test"):
for file in files:
print(os.path.join(curDir, file))
输出结果如下:
D:/test\dir1\1-1.txt
D:/test\dir1\1-2.txt
D:/test\dir1\dir1-1\1-1-1.txt
D:/test\dir2\2-1.txt
D:/test\dir2\2-2.txt
D:/test\dir3\3-1.txt
D:/test\dir3\3-2.txt
同样地,我们也可以利用os.walk输出test文件夹下所有的子目录(子文件夹):
import os
for curDir, dirs, files in os.walk("D:/test"):
for dir in dirs:
print(dir)
输出结果:
dir1
dir2
dir3
dir1-1
shutil模块
import shutil
# 1. 删除文件夹
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""
# 2. 拷贝文件夹
"""
shutil.copytree("/Users/wupeiqi/Desktop/图/csdn/","/Users/wupeiqi/PycharmProjects/CodeRepository/files")
"""
# 3.拷贝文件
"""
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/")
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/x.png")
"""
# 4.文件或文件夹重命名
"""
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/xxxx.png")
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/files","/Users/wupeiqi/PycharmProjects/CodeRepository/images")
"""
# 5. 压缩文件
"""
# base_name,压缩后的压缩包文件
# format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar".
# root_dir,要压缩的文件夹路径
"""
# shutil.make_archive(base_name=r'datafile',format='zip',root_dir=r'files')
# 6. 解压文件
"""
# filename,要解压的压缩包文件
# extract_dir,解压的路径
# format,压缩文件格式
"""
# shutil.unpack_archive(filename=r'datafile.zip', extract_dir=r'xxxxxx/xo', format='zip')
sys.argv模块
这个模块主要作用是获取获取执行脚本的参数。
import sys
print(sys.argv)
执行输出:
['c:/Users/vincent/Desktop/code/neimeng-python/test/test_argv.py']
输出结果是当前的执行文件。
当执行脚本时增加参数:python test.py 123 abc tom
。
执行结果输出:
['c:/Users/vincent/Desktop/code/neimeng-python/test/test_argv.py', 'abc', '123', 'tom']
就可以获取用户传入的参数。