标签:max 程序 count exit orm tor dir pytho col
改完文件名称后,Dr.he 发现分别保存5个状态的jpg 文件的文件夹出现缺少文件的情况。为了让他少熬夜查找缺失文件,结合网友分享的脚本,写了查找以下代码,满足他的需求,也以防自己忘记。以下代码能解决实际需求,适合初学者。不足之处,欢迎指出修正!
1 import os 2 import datetime 3 4 5 def standard_directory(): 6 pass_status = False # 目录输入通过的状态,初始不通过 7 inp_limit = 5 # 输入限制次数 8 warn_str = "请输入要检索的文件夹完整路径(如C:/Users/Default/Pictures),退出请按’#‘:" 9 for inp_count in range(inp_limit): 10 pass_status = True # 目录输入通过的状态,布尔类型 11 inp_path = input("文件夹路径输入限制{}次,第{}次\n".format(inp_limit,inp_count+1)+warn_str) 12 if ‘\\‘ in inp_path or ‘/‘ not in inp_path: 13 if inp_path == ‘#‘: 14 exit() # 退出程序 15 print("输入的文件夹路径格式有误,路径层级只能用正斜杠‘/’表示\n") 16 pass_status = False 17 elif os.path.isfile(inp_path): 18 print("输入路径是文件格式,路径只能是文件夹的目录\n") 19 pass_status = False 20 elif os.path.isdir(inp_path): 21 count = 0 # 记录文件的数量 22 for folder in os.listdir(inp_path): 23 if ‘.‘ in folder: 24 count += 1 # 记录文件的数量 25 if count > 0: 26 print("输入的路径中包含文件,路径中只能有文件夹\n") 27 pass_status = False 28 # 当路径不存在 29 else: 30 print("输入文件夹路径不存在或存在未知错误,请检查\n") 31 pass_status = False 32 if pass_status: 33 return inp_path 34 if not pass_status: 35 print("{}次输入检索的文件夹路径有误,程序退出".format(inp_limit)) 36 exit() # 路径输入错误,退出程序 37 38 39 def standard_file(folder_dir): 40 pass_status = False # 目录输入通过的状态,初始不通过 41 inp_limit = 5 # 输入限制次数 42 warn_str = "请输入记录结果的文件完整路径(如C:/Users/Default/Pictures/log.txt),退出请按’#‘:" 43 for inp_count in range(inp_limit): 44 pass_status = True # 目录输入通过的状态,布尔类型 45 inp_path = input("文件夹路径输入限制{}次,第{}次\n".format(inp_limit,inp_count+1)+warn_str) 46 if ‘\\‘ in inp_path or ‘/‘ not in inp_path: 47 if inp_path == ‘#‘: 48 exit() # 退出程序 49 print("输入的文件路径格式有误,路径层级只能用正斜杠‘/’表示\n") 50 pass_status = False 51 elif os.path.isdir(inp_path): # 若输入的是存在的文件夹路径 52 print("输入的文件路径格式有误,路径是文件夹路径\n") 53 pass_status = False 54 elif os.path.isfile(inp_path): 55 parent_path = os.path.dirname(inp_path) 56 if parent_path == folder_dir: 57 print("记录结果的文件不能在要检索的文件夹路径中:{}\n".format(folder_dir)) 58 pass_status = False 59 continue 60 elif not os.path.exists(inp_path): # 若输入的是不存在的文件或文件夹 61 # 若是文件路径,上一级记录是文件夹是存在 62 path_list = inp_path.split(‘\n‘) 63 for sub_path in path_list: 64 if ‘.‘ in sub_path: 65 parent_path = os.path.dirname(sub_path) # 获取文件的上级目录 66 if not os.path.exists(parent_path): # 文件的上级目录不存在 67 print("输入文件的上级目录不存在\n") 68 pass_status = False 69 elif parent_path == folder_dir: # 文件的上级目录不能是要检索的文件夹路径 70 print("记录结果的文件不能在要检索的文件夹路径中:{}".format(folder_dir)) 71 pass_status = False 72 continue 73 else: 74 print("输入的目录不存在\n") 75 pass_status = False 76 else: 77 # 若是文件则要判断,文件上级路径是否存在 78 print("输入的文件路径存在未知") 79 pass_status = False 80 if pass_status: 81 return inp_path 82 if not pass_status: 83 print("{}次输入记录结果的文件完整路径有误,程序退出".format(inp_limit)) 84 exit() # 路径输入错误,退出程序 85 86 87 def input_directory(): 88 src_path = standard_directory() 89 print("\n") 90 res_path = standard_file(src_path) 91 return src_path, res_path 92 93 94 def max_files_directory(src_directory): 95 file_folders = os.listdir(src_directory) # 文件夹名称列表 96 file_folder_count = len(file_folders) # 传参的文件夹中文件夹的数量 97 file_num_list = [] # 定义文件数量列表,赋值空列表 98 # 查找文件最多的目录(文件夹)作为参照目录 99 for folder in file_folders: 100 count = 0 # 记录文件名称是14个字符的文件数量 101 file_list = os.listdir(src_directory + "/" + folder) # 文件夹中的文件列表 102 # 查找包括后缀名的文件名称是14个字符 103 for file in file_list: 104 if len(file) == 14: 105 count += 1 # 记录文件名称长度符合的文件数量 106 file_num_list.append(count) # 将文件数量增加到件数量列表的后面 107 # file_num = len(file_list) # 获取文件夹中的文件数量 108 # file_num_list.append(file_num) # 将文件数量增加到件数量列表的后面 109 max_file_index = file_num_list.index(max(file_num_list)) # 查找文件列表中文件数量最大的索引 110 # 文件名符合条件的文件数量最多的文件夹是参照目录,其余文件夹的文件与参照目录的文件比较不同 111 max_file_folder_dir = src_directory + "/" + file_folders[max_file_index] 112 # 返回形参目录的文件最多的文件夹目录,文件夹列表的大小,参考目录的文件列表 113 return max_file_index, file_folder_count, max_file_folder_dir 114 115 116 # 查找目标目录的文件是否缺少参考目录的文件,记录下缺少的文件到txt文本中 117 def find_missing_file(): 118 # 返回要对比文件夹目录、记录结果的文件路径 119 src_directory, log_path = input_directory() 120 121 # 返回实参目录的文件最多的文件夹索引、实参目录的文件夹列表的大小,实参目录中参考目录 122 max_file_index, file_folder_count, max_file_folder_dir = max_files_directory(src_directory) 123 refer_file_names = os.listdir(max_file_folder_dir) # 参照目录下的文件列表 124 print("\n输入的目录中文件最多的文件夹索引:{},输入的目录中文件夹列表的大小:{},作为参考的文件夹路径:{}\n参考目录的文件列表:{}\n" 125 .format(max_file_index, file_folder_count, max_file_folder_dir,refer_file_names)) 126 127 # 获取当前日期和时间,将时间转为字符串 128 now_time = datetime.datetime.strftime(datetime.datetime.now(),‘%Y-%m-%d %H:%M:%S‘) 129 # 以读/写 追加的模式打开文件 130 write_file = open(log_path, ‘a+‘) 131 # 以追加的模式写入当前日期和时间 132 write_file.write(now_time + "\n") 133 # 以追加的模式写入参照目录 134 write_file.write("参考目录:" + max_file_folder_dir + "\n") 135 # 循环目录的文件列表 136 for i in range(file_folder_count): 137 # 当索引等于有最多文件的文件夹(参考文件夹)索引,跳出当前循环 138 if i == max_file_index: 139 print("第{}个文件夹是参考目录:{}".format(i + 1, os.listdir(src_directory)[i])) 140 continue 141 142 count = 0 # 记录与参照文件夹的文件不同的数量 143 # 目的文件夹(非参考文件夹)的文件 144 target_path = src_directory + "/" + os.listdir(src_directory)[i] 145 target_file_names = os.listdir(target_path) 146 print("第{}个文件夹的路径{}\n文件夹的文件列表:{}\n".format(i+1, target_path, target_file_names)) 147 148 for name in refer_file_names: 149 if len(name) == 14: 150 if name not in target_file_names: 151 write_file.write(name + "\n") # 将在参照目录的文件却不在目的文件夹(非参照文件夹)的文件,写入文件 152 count += 1 # 记录与参照文件夹的文件不同的数量 153 write_file.write(target_path + " 缺少的文件数目:" + str(count) + "\n\n") 154 155 write_file.close() # 关闭文件 156 157 158 # Python 内置的系统变量 __name__用于标识所在模块的模块名 159 # if __name__ == ‘__main__‘: 的作用是确保只有单独运行该模块时,此表达式才成立,才可以进入此判断语法,执行其中的测试代码 160 if __name__ == ‘__main__‘: 161 find_missing_file()
标签:max 程序 count exit orm tor dir pytho col
原文地址:https://www.cnblogs.com/Sharing-knowledge/p/14194226.html