04 没有痛苦就意味着没有价值

虽然废了半天甚至一天才发现问题就是一些很狗血的逻辑小错误,符号小错误,表达小错误,但这仍然是有价值的。它告诉我们:整体上的构思,当然是允许不那么严谨呆板的,可是要实现它,一个标点错误也不行。这是一对整体写意和局部精严的矛盾,我们需要学会习惯它,控制它。

不要有抱怨,既然它能够提供如此丰富精巧的案例也是非常难得的。我不知道为什么明明程序结束了,可是还有线程没有脱离对一些文件夹的使用,除非你关掉终端Shell,否则就无法删除。这当然是涉及计算机本身 的内部构造,所以确实有必要买些这方面的书浏览一下了。要学一本书,如果不是要求很透的话其实也不要多长时间,这取决于我们的需要。但是我使用os.chdir先移动控制平台,我想象它就像工程机械吊车的最前端,移动这个装置,然后使用os.rmdir它却允许我们删除一个空文件夹了。我想删除一个文件夹的内容最好就是这样一个一个的删除文件os.remove,再删除空目录可能比直接使用shutil.rmtree好,因为即使我等待5分钟我发现还是有线程或者子程序在占用一个文件夹,而这个文件夹只是一个过程辅助用的,我需要删除它并且是及时删除,不然就会越来越麻烦了。

要特别注意循环嵌套时不要重复使用一些用过的变量名,虽然好像是重新使用会弃掉前者,但一不小心就会产生没想到的诡异牵连。宁愿啰嗦,免得将来难以查找。

不要一股脑儿地写一大篇,宁可从一个小的可实现的程序慢慢扩大成长,否则根本撑不起来都是白写的。

总是可以通过print搞清它的实际数据流的轨迹,不管发生了什么,事实上问题是能搞清的。我们要构造一个尽可能完备的数据集用来做实验,这样各种不可思议的错误都会被揭开暴露。

搞一个简单的ZDCS系统不是什么复杂的事情。我将很快结束这方面的工作投入更大的设想。一方面需要几个函数完成存档,另一方面需要几个函数完成编码解码,就解决了百度本身的毁掉文件修改信息的毛病了。将来其实可以使用selium包直接模拟人登录云盘操作,就可以完全融合云盘和电脑的文件文件夹了。这个不是本质,慢慢升级即可。

我觉得看着那些数据流如江河奔涌的时候,真是非常惬意。这真是上天不可思议的伟大荣耀和壮观景象,我们要全然敬畏、无所保留地赞美他!充满热情地接近他!一宿虽然有眼泪,重新再起就要欢然奔腾,如勇士无所畏惧地挑战他!

我自己觉得这几行代码有点惊若矫龙,因为回环往复,层层嵌套并且出了很多诡异的细节,我以为30分钟能搞定结果3天才驯服它。主要是它逼着我重新梳理了原来的文件操作函数的bug。

#15 对一个文件夹中的文件夹按超过10天无修改进行存档

def CDwj(X):

    pathm = X
    
    # 1)找出需要存档的文件夹

    CWJL = []

    for wjj in MKwjcz.DFfl(X)[0]:   
    
        tuples = os.walk(str(X)+'/'+str(wjj))

        LJb = []

        ytime = time.time()

        atime = time.localtime()
    
        for tuple1 in tuples:
       
            for xch in tuple1[2]:

                fileinfo = os.stat(str(tuple1[0])+'/'+str(xch))

                xcc = fileinfo.st_mtime

                LJb.append(xcc)
            
        LJb.sort()     
    
        if ytime - LJb[-1]  > 10*24*3600:

            CWJL.append(wjj)

    print(CWJL) #查看所找到的文件夹是否正确
    
    # 2)对找出的文件夹存档        

    for cwjj in CWJL:

        none = False              

        for wjd in  MKwjcz.DFfl('D:/ZDCS系统/存档区')[0]:

            if wjd == cwjj:#找到与要存档文件夹名字同名的文件夹名字

                none = True
                
            else :

                pass           

        if none:
            print('同名')            
        
#================================       
            
            nonea = False
            
                #对这个同名文件夹的子文件夹序列(年度)进行分析

            print(MKwjcz.DFfl('D:/ZDCS系统/存档区'+'/'+str(cwjj))[0])#如用wjd怎么会是2021?#因为wjd在改逻辑结构后并不在上面的for循环中顺序定义所以该wjd实际上变成别的值而非'同名a'

            for wjjnian in MKwjcz.DFfl('D:/ZDCS系统/存档区'+'/'+str(cwjj))[0]:

                print('wjjnian',wjjnian)

                print('atime[0]',atime[0])

                if str(atime[0]) == wjjnian :#要存档的文件夹所在的年与已有项目的年文件夹同

                    print(MKwjcz.DFfl('D:/ZDCS系统/存档区'+'/'+str(cwjj))[0])

                    nonea = True

                    print(wjjnian)

                    print(nonea)

            if nonea:#'如果同年'

                pass
            #-----------------------------------------

                print('同年')

                noneb = False                

                #对这个同名的年文件夹的子文件夹(月度)进行分析

                for wjjyue in MKwjcz.DFfl('D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(wjjnian))[0]:

                    if wjjyue == str(atime[1]):#要存档的文件夹已有当月的文件夹

                        print('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv')

                        print('同月项目的名称和月份')
                        
                        print(str(cwjj))

                        print(str(wjjnian))

                        print(wjjyue)#虽然用过的名字wjjyue可以再使用并弃掉前者但在循环嵌套时会带来非常麻烦的错误难以查清

                        noneb = True
                            
                if noneb:                                
                
                    #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

                    print('同月')
                                                   

                    #要存档的工作区的这个文件夹是以项目名字命名的,存档要把它里面的子文件夹和文件放入该项目月文件夹
                    #但此时可能面临重名冲突,所以要先对该要存档文件夹进行不重名处理

                    print('D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(wjjnian)+'/'+str(wjjyue))

                    print('D:/ZDCS系统/工作区/'+'xxx')
                    
                    shutil.copytree('D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(atime[0])+'/'+str(atime[1]),'D:/ZDCS系统/工作区/'+'xxx')#存档区该项目当月文件复制到这里                            

                    MKwjcz.CLcm('D:/ZDCS系统/工作区/')

                    shutil.rmtree('D:/ZDCS系统/工作区/'+'xxx')#删除辅助文件                  

                  
                    #将含有str(cwjj)的那个文件夹的全部内容移动到存档区的该月文件夹

                    print('已运行到这里')
                    

                    MKwjcz.ZJmv('D:/ZDCS系统/工作区/'+str(cwjj),'D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(atime[0])+'/'+str(atime[1]))

                    
                    
                    os.chdir('D:/ZDCS系统/工作区')


                    os.rmdir(str(cwjj)) #直接删除就报错,使用了os.chdir('D:/ZDCS系统/工作区')就正常了
                    
                #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
                                                 
                else:#新建月文件夹                    
                
                    shutil.move(str(pathm)+'/'+str(cwjj),'D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(wjjnian)+'/'+str(atime[1]))            
            #-----------------------------------------------------------------------------
            else:#新建年文件夹存档
            
                shutil.move(str(pathm)+'/'+str(cwjj),'D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(atime[0])+'/'+str(atime[1]))

#==============================================
           

        else:#新建项目文件夹存档            
            
            shutil.move(str(pathm)+'/'+str(cwjj),'D:/ZDCS系统/存档区'+'/'+str(cwjj)+'/'+str(atime[0])+'/'+str(atime[1])) 
       
    print(CWJL)            
        
    return CWJL
    
# 16 将一个文件夹里的dwg文件按超过10天无修改转移到项目文件夹里 

def WJJwj(X):

    pathm = X

    # 0) 只对工作区dwg格式的文件存档

    DWG = []

    for si in MKwjcz.DFfl(X)[1]:

        if os.path.splitext(si)[-1] == '.dwg':#只对dwg格式的文件存档

            DWG.append(si)

    # 1)把文件的操作转换为文件夹的操作
            
    CWJLy = [] #尽量不要共名

    for wj in DWG:          
        

        ytime = time.time()      
        
        atime = time.localtime()            
           

        fileinfo = os.stat(str(pathm)+'/'+str(wj))

        xcc = fileinfo.st_mtime
       
            
        if ytime - xcc > 10*24*3600:

            CWJLy.append(wj)
            
    print('要存档的文件如下')
    
    print(CWJLy) #查看所找到的文件是否正确

    # 2)从文件名中获得项目名称,为文件创立相应的文件夹

    pattern = r'[\s*]'
    
    for xwj in CWJLy:
        
    

        MingL = re.split(pattern,xwj)

        XMing = MingL[0]

        if os.path.splitext(XMing)[-1] == '':

            print(XMing)

            if os.path.exists(pathm+'/'+str(XMing)):

                shutil.move(pathm+'/'+str(xwj),pathm+'/'+str(XMing)+'/'+str(xwj))

                pass

            else:

                os.mkdir(pathm+'/'+str(XMing))

                shutil.move(pathm+'/'+str(xwj),pathm+'/'+str(XMing)+'/'+str(xwj)) 
        else:
           
            os.mkdir(pathm+'/'+str(os.path.splitext(XMing)[0]))
            
            shutil.move(pathm+'/'+str(xwj),pathm+'/'+str(os.path.splitext(XMing)[0]))
            
##patha = 'D:/ZDCS系统/工作区'
##
##WJJwj(patha)

##patha = 'D:/ZDCS系统/工作区'
##
##CDwj(patha)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值