要求:文件素材压缩包 problem2_files.zip,使用 Python 进行这样的操作:

把 jpg,png,gif 文件夹中的所有文件移动到 image 文件夹中,然后删除 jpg,png,gif 文件夹

把 doc,docx,md,ppt 文件夹中的所有文件移动到 document 文件夹中,然后删除

文件素材包.png

思路:先理解要求。对有关文件的操作,要用到Python的内置模块os模块。

1.如何浏览各个文件夹:用os.listdir函数和for函数配合使用。因为有七个文件夹,所以要用到for函数的嵌套

2.如何创建目标文件夹:os.makedirs函数

3.如何移动文件到目标文件夹:shutil模块的move函数

4.如何删除文件夹:os.removedirs函数

以下是自己写的代码
import os
import shutil
path = 'C:/Users\mandy\Desktop\problem2_files'
folder1 = path + '/image'
folder2 = path + '/document'
os.makedirs(folder1)
os.makedirs(folder2)
list1 = ['jpg','png','gif']
list2 = ['doc','docx','md','ppt']
#字符串要用单引号括起来
for fo1 in range(len(list1)):
folderlist1 = path + '/' + list1[fo1]
files1 = os.listdir(folderlist1)
for f1 in files1:
shutil.move(folderlist1+'/'+f1,folder1)
#shutil.move里面是两个路径才运行成功
os.removedirs(folderlist1)
for fo2 in range(len(list2)):
folderlist2 = path + '/' + list2[fo2]
files2 = os.listdir(folderlist2)
for f2 in files2:
shutil.move(folderlist2+'/'+f2,folder2)
os.removedirs(folderlist2)
代码运行成功,符合要求
以下是参考答案、
import os
import shutil
# 需要把路径替换成你的文件夹所在路径,当把这个代码文件放在要处理的文件夹外一层时,可以使用下面的相对路径写法
path = './problem2_files'
# 创建目标文件夹
os.makedirs(path + '/image')
os.makedirs(path + '/document')
# 将需要处理的后缀名存储到list中
image_suffix = ['jpg', 'png', 'gif']
doc_suffix = ['doc', 'docx', 'ppt', 'md']
# 移动jpg、png、gif文件中的文件
for i in image_suffix:
cur_path = path + '/' + i
files = os.listdir(cur_path)
for f in files:
# 移动文件夹中的文件
shutil.move(cur_path + '/' + f, path + '/image')
# 删除文件夹
os.removedirs(cur_path)
# 移动doc、docx、md、ppt文件夹中的文件,步骤与前面类似
for d in doc_suffix:
cur_path = path + '/' + d
files = os.listdir(cur_path)
for f in files:
shutil.move(cur_path + '/' + f, path + '/document')
os.removedirs(cur_path)

总结:

1.自己写的代码思路算是正确,最后通过提示还有网上搜索出错原因总算运行成功。参考答案的代码简洁,可读性比较强,自己要多多练习积极靠拢。

2.字符串要用单引号括起来,如'jpg’,没用单引号,出错。

3.敲代码时候自己很粗心,经常敲错变量名造成出错。找不到指定文件、路径。通过不同功能代码的测试,找出错误出现在哪一步,然后网上搜索,也明白了一些错误出现的原因

4.此练习的思路和解决办法学习后,要顺便把出现的知识点也好好学习,如os、shutil模块里面的常用函数