# -*- coding: utf-8 -*-
import os
import shutil
# 指定要创建文件夹的路径
path2 = "E:/Test/"
# 使用os模块中的mkdir函数来创建新的文件夹
os.mkdir(path2 + "higher")
os.mkdir(path2 + "next")
# 定义源文件夹和目标文件夹路径
source_folder = "E:/Test/passage"
target_folder = "E:/Test/higher"
target_folder1 = "E:/Test/higher/"
path3 = "E:/Test/next/"
similarities = {'3150405011.周奔滔。2016.专业认识实习报告.docx': [('3150405014黄辉.2016专业认识实习报告.docx', 0.7375751820196265)], '3150405014黄辉.2016专业认识实习报告.docx': [('3150405011.周奔滔。2016.专业认识实习报告.docx', 0.7375751820196265)], '3150405020鲍冬2016专业认识实习报告.docx': [('3150405029.胡浩喆.2016专业认识实习报告.docx', 0.45556552962298025)], '3150405029.胡浩喆.2016专业认识实习报告.docx': [('3150405020鲍冬2016专业认识实习报告.docx', 0.45556552962298025)], '3150405023.林综艺.2016专业认识实习报告.docx': [('3150405024.秦嘉豪.2016专业认识实习报告.docx', 0.43817137147139645)], '3150405024.秦嘉豪.2016专业认识实习报告.docx': [('3150405023.林综艺.2016专业认识实习报告.docx', 0.43817137147139645), ('3150405027.沈磊.2016专业认识实习报告.docx', 0.403960396039604), ('3150405035.黄泽磊.2016专业认识实习报告.docx', 0.45032297754537065)], '3150405027.沈磊.2016专业认识实习报告.docx': [('3150405024.秦嘉豪.2016专业认识实习报告.docx', 0.403960396039604)], '3150405035.黄泽磊.2016专业认识实习报告.docx': [('3150405024.秦嘉豪.2016专业认识实习报告.docx', 0.45032297754537065)], '3150405025.俞逸豪.2016专业认识实习报告.docx': [('3150405026.吴登麒.2016专业认识实习报告.docx', 0.6036625245258339)], '3150405026.吴登麒.2016专业认识实习报告.docx': [('3150405025.俞逸豪.2016专业认识实习报告.docx', 0.6036625245258339)]}
# 获取源文件夹中所有要复制文件的文件名列表
keys_list = [key for key in similarities.keys()]
# 使用列表推导式将字典中的键存储到一个字符串列表keys_list中
print('diction is',similarities)
print('字典中的键:',keys_list)
max2 = len(similarities) # 得到字典的长度
print('字典的长度:',max2)
# 遍历docx文件列表,并将每个文件复制到目标文件夹中
for file_name in keys_list:
source_file_path = os.path.join(source_folder, file_name)
target_file_path = os.path.join(target_folder, file_name)
shutil.copy(source_file_path, target_file_path)
j = 0
while j < max2: # 对字典中的每一个键进行遍历
print('键的名字为:'+keys_list[j])
os.mkdir(path3 + keys_list[j].split(".")[0])
# 使用os模块中的mkdir函数来创建新的文件夹,名字为该学生学号
value = similarities.get(keys_list[j])
# 得到字典中目标键所对应的值
max3 = len(value) # 得到字典的值里所存的列表的长度
print('字典的值里所存的列表的长度:',max3)
j = j + 1
k = 0
while k < max3: # 对字典里的每一个值所代表的列表进行遍历
print('字典里的每一个值',value) # 得到字典中的每一个值
keys = value[k][0]
print('元组中所要的字符串',keys)# 得到元组中的字符串
source = os.path.join(target_folder, keys)
print(source)
target = os.path.join(path3, keys_list[j].split(".")[0])
print(target)
shutil.copy(source, target)
# 复制文件由起点文件夹复制到目标文件夹
k = k + 1
这个 Python 脚本,我使用该模块在指定目录中(E:/Test)创建新文件夹(E:/Test/higher)。然后将特定文件(重复度>0.4的docx文件)从源目录复制到新创建的文件夹(E:/Test/higher)中。它还使用字典中的文件名作为文件夹名称,在另一个指定目录(E:/Test/next/)中创建子文件夹。
该脚本首先在E:/Test/名为“higher”和“next”的目录中使用os.mkdir(). 然后它指定文件复制操作的源文件夹和目标文件夹。该similarities变量是一个字典,其中包含作为键的文件名和作为值的元组列表。列表中的每个元组都包含另一个文件名和相似度分数。
该脚本使用列表从字典中创建键列表keys_list。然后它遍历此列表并使用 将每个文件从源文件夹复制到“higher”文件夹shutil.copy()。它还通过similarities,使用文件名中的学生 ID 号在“next”文件夹中为字典中的每个键创建一个新的子文件夹,再向里面分别复制相应的docx文件。但是这一个地方总是爆错:
source = os.path.join(target_folder, keys)
print(source)
target = os.path.join(path3, keys_list[j].split(".")[0])
print(target)
shutil.copy(source, target)
# 复制文件由起点文件夹复制到目标文件夹
无法将docx文档复制到“next”文件夹中以学生ID命名的子文件夹。想问问该怎么改?
所报错误为:
os.mkdir(path3 + keys_list[j].split(".")[0])
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'E:/Test/next/3150405014黄辉'