zoukankan      html  css  js  c++  java
  • 意外格式化分区数据如何恢复及如何进行数据清洗?

        今天安装Win10系统的时候,不小心删除了分区信息文件夹,导致分区信息丢失,直接识系统别不了分区,提示需要格式化。

       当时的内心是一万只CNM奔腾而过,能不能不要这么逗人。然后脑子一热,说格式化就格式化吧,反正资料又不是非常重要,然后手一抖,就点了格式化了。格式化之后,才想起来,这个分区里面,不仅仅存有我个人的资料,

    还存有别人的资料,我自己的资料丢失么,就丢失了,但是别人的资料需要找回来啊。

      然后打开N多年不怎么用的移动硬盘,找到恢复数据的软件,对数据进行恢复。当然吃瓜群众们肯定会问,为什么不直接在网络上下了,网上大部分能下载的数据恢复软件都是要钱的,并且金额还不低,或者就是需要安装软件的,然后这些软件

    都是被别人植入了后门的。

     或者就是提示需要注册码,然后需要在淘宝上购买激活码的,总之套路很多,但是我们又急着恢复,哪有这么多的时间来进行这些折腾呢。

    好了,废话不多说,直接进入正题。

    1.打开绿色版的数据恢复软件。

    点击误格式化硬盘,进行数据恢复。

     分区数据正在扫描中,等待一会。

     我们会看到,好多文件及文件夹

      选择我们想要进行恢复的文件夹,进行数据恢复。

     数据正在恢复中。

    数据恢复之后,我们会看到很多无用的文件和文件夹,这个时候,怎么办呢?

     在进行数据恢复的时候。我们都会怕数据丢失,不完整,这个时候,怎么办呢?我们一般都是对搜索到的文件和文件夹都进行恢复,

    然后就会恢复出来很多无用的文件和文件夹,我自己恢复的差不多就有9W多个文件夹,然后从这9W个文件夹之后,去找我们想要的数据

    那无异于大海捞针。

    这个时候怎么办呢?当然是让计算机来进行操作了啊,速度又快,又准确。但是使用计算机来进行数据搜索的话,需要编写专门的应用程序,使用C/C++、Java来编写的话

    太浪费时间了,怎么办呢?当然是使用Python了啊,人生苦短,我用Python。

    好了,废话就不多说了,撸起袖子,直接开干吧。

    import os,sys
    import shutil
    
    
    
    def get_file_type(file):
        filetype = file.split(".")
        #print(filetype)
        if(len(filetype) > 0):
            print("文件类型:%s " % filetype[-1])
        else:
            print("无法识别的文件类型")
        return filetype
    
    def del_file_judge(dir):
        dir_content = [x for x in os.listdir(dir) if x != dir]
        size = 0
        for f in dir_content:
            #print(f)
            fn = os.path.join(dir, f)
            size = os.path.getsize(fn)
            get_file_type(f)
            if (size > 10240000):
                print("文件名:%s 文件大小: %d" % (f,size))
                return False
            elif (f.lower().find(".ai") > -1):
                print("找到AI文件:%s 
    " % f)
                return False
            elif (f.lower().find(".psd")> -1):
                print("找到photoshop文件:%s 
    " % f)
                return False
            # elif (f.lower().find(".otf")> -1):
            #     print("找到字体文件文件:%s 
    " % f)
            #     return False
            # elif (f.lower().find(".ttf")> -1):
            #     print("找到字体文件文件:%s 
    " % f)
            #     return False
            # elif (f.find(".jpg")> -1):
            #     print("找到图片文件:%s 
    " % f)
            #     return False
            # elif (f.lower().find(".png")> -1):
            #     print("找到图片文件:%s 
    " % f)
            #     return False
            # elif (f.lower().find(".c")> -1):
            #     print("找到C语言文件:%s 
    " % f)
            #     return False
            # elif (f.lower().find(".h")> -1):
            #     print("找到C语言文件:%s 
    " % f)
            #     return False
            elif (f.lower().find(".pdf")> -1):
                print("找到PDF文件:%s 
    " % f)
                return False
            elif (f.lower().find(".doc")> -1):
                print("找到Doc文件:%s 
    " % f)
                return False
            elif (f.lower().find(".xls")> -1):
                print("找到Xls文件:%s 
    " % f)
                return False
            # elif (f.lower().find(".txt")> -1):
            #     print("找到Xls文件:%s 
    " % f)
            #     return False
            elif (f.lower().find(".pcb")> -1):
                print("找到电路设计相关文件:%s 
    " % f)
                return False
            elif (f.lower().find(".mp4")> -1):
                print("找到MP4文件:%s 
    " % f)
                return False
            elif (f.lower().find(".flv")> -1):
                print("找到FLV文件:%s 
    " % f)
                return False
            elif (f.lower().find(".wmv")> -1):
                print("找到WMV文件:%s 
    " % f)
                return False
            elif (f.lower().find(".7z")> -1):
                print("找到压缩包文件:%s 
    " % f)
                return False
            elif (f.lower().find(".zip")> -1):
                print("找到压缩包文件:%s 
    " % f)
                if size < 1024000:
                    print("文件太小,不是需要的文件:%s, %d" % (fn, size))
                    return True
                return False
            elif (f.lower().find(".rar")> -1):
                print("找到压缩包文件:%s 
    " % f)
                return False
            elif (f.lower().find(".iso")> -1):
                print("找到光盘文件:%s 
    " % f)
                return False
            elif os.path.isdir(fn):
                print("找到文件夹:%s 
    " % fn)
                return False
            else:
                print("将会删除文件夹:%s 
    " % dir)
        return True
    
    def del_nouseful_file(path):
        del_flag = False
        dir_content = [x for x in os.listdir(path) if x != path]
        for item in dir_content:
            dir = os.path.join(path, item)
            try:
                print("正在分析文件夹: %s 
    " % dir)
                del_flag = del_file_judge(dir)
                print("删除标志:%d " % del_flag)
                if del_flag:
                    #os.rmdir(dir)  #os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
                    print("正在删除文件夹: %s 
    " % dir)
                    shutil.rmtree(dir) #删除文件python夹库
                else:
                    print("文件夹:%s 将会保存 
    " % dir)
                print(dir)
            except Exception as e:
                print('Exception',e)
    
    def del_emp_dir(path):
        for (root, dirs, files) in os.walk(path):
            for item in dirs:
                dir = os.path.join(root, item)
                try:
                    if (len(files) == 0) or (not os.path.isdir(dir)) :
                        os.rmdir(dir)  #os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
                        print(dir)
                except Exception as e:
                    print('Exception ' , e)
                    print("
    ")
    
    if __name__ == '__main__':
        dir = r'H:KDR\'    #D:KDR
        del_emp_dir(dir)
        del_nouseful_file(dir)
    

      

     

     如果你也遇到这种情况,需要进行数据清洗和整理的话,也可以使用这个程序。

    这个程序会自动删除空文件夹,以及一些无用的文件夹。

    Python 运行环境: 建议使用Python3,因为python2不支持中文,如果想要使用Python2的话,请将中文改为英文名称,就能正常运行了。

    运行命令如下:

    好了,不懂的,需要咨询的,可以加QQ群:

    当然了,也可以加我的QQ:

  • 相关阅读:
    最短路径:HDU2006-一个人的旅行(多个起点,多个终点)
    最短路径(最基础,经典的模板和思想):HDU-2544最短路
    数学算法:poweroj1026-丑数(根据固定倍数得到从小到大的序列)
    动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
    数论:HDU1066-Last non-zero Digit in N!
    容斥原理:HDU-4135Co-prime
    数学算法:求一个数的质因子
    动态规划(入门,滚动数组,记录的都是状态):SWUSTACM-1010 魔兽争霸之最后的反击
    动态规划(入门):各种数字三角形
    动态规划:HDU2571-命运
  • 原文地址:https://www.cnblogs.com/kmust/p/11740936.html
Copyright © 2011-2022 走看看