У меня есть несколько файлов в подпапке, которые нужно скопировать в другую основную папку с указанным именем подпапки с датой и временем, что означает копирование A1 / B / C / D / D.txt в A2 / B / C / D / datetime_username / D.txt , есть несколько папок в каталогах B, C, D, может быть, B1, B2 ... пользователь решает, какую подпапку передать

Теперь я пытаюсь с основными вещами распечатать путь к папке D. Папка, которую я пытаюсь сделать, находится на моем рабочем столе.


    import os, shutil
    
    os.chdir('C:\\path')
    
    def main():
        lvl1 = ['Typ','GFP2']
        lvl2 = ['A0','A1']
        lvl3 = ['SCAN','MBIST']
    
        project = input("Enter project: ")
        
        #Validation
        for s in lvl1:
    
            if s == project:
                src1 = 'IDC\\{}'.format(s)
                
                stepping = input("Enter Stepping: ")
                
                for l2 in lvl2:
                    if l2 == stepping:
                        #shutil.copytree()
                        src2 = src1+'\\{}'.format(l2)
    
                        thirdlvl = input("Enter SCAN/MBIST: ")
    
                        for l3 in lvl3:
                            if l3 == thirdlvl:
                                src3 = src2+'\\{}'.format(l3)
                                print(src3)
                            
    
                else:
                    print("Stepping not found")
                    break
    
        else:
            print("Project name not found")
        
        
    main()

И я получу ''

Enter project: Typ
Enter Stepping: A0
Enter SCAN/MBIST: SCAN
IDC\Typ\A0\SCAN
Stepping not found

«»»

Как, если я хочу напечатать «Шаги не найдены» только тогда, когда они не найдены, теперь оно печатает, даже если эта папка существует.

Спасибо

0
Yen 5 Окт 2020 в 05:32

1 ответ

Лучший ответ

Вам необходимо добавить (или изменить положение) break в вашем for-else. Минимальная модификация:

def main():
    lvl1 = ['Typ','GFP2']
    lvl2 = ['A0','A1']
    lvl3 = ['SCAN','MBIST']

    project = input("Enter project: ")
    
    #Validation
    for s in lvl1:

        if s == project:
            src1 = 'IDC\\{}'.format(s)
            
            stepping = input("Enter Stepping: ")
            
            for l2 in lvl2:
                if l2 == stepping:
                    #shutil.copytree()
                    src2 = src1+'\\{}'.format(l2)

                    thirdlvl = input("Enter SCAN/MBIST: ")

                    for l3 in lvl3:
                        if l3 == thirdlvl:
                            src3 = src2+'\\{}'.format(l3)
                            print(src3)
                    break
            else:
                print("Stepping not found")
                
            break
    else:
        print("Project name not found")

Вы также можете избавиться от for-loop,

def main():
    lvl1 = ['Typ','GFP2']
    lvl2 = ['A0','A1']
    lvl3 = ['SCAN','MBIST']

    project = input("Enter project: ")

    #Validation
    if project in lvl1:
        src1 = 'IDC\\{}'.format(project)
        
        stepping = input("Enter Stepping: ")
        
        if stepping in lvl2:
            #shutil.copytree()
            src2 = src1+'\\{}'.format(stepping)

            thirdlvl = input("Enter SCAN/MBIST: ")

            if thirdlvl in lvl3:
                src3 = src2+'\\{}'.format(thirdlvl)
                print(src3)
        else:
            print("Stepping not found")
    else:
        print("Project name not found")

Многослойная структура if-else не требуется. Вот модификация. Я также использую os.path.join(), который больше подходит для обработки путей, чем строковые операции:

import os, shutil

working_dir = os.path.join("C:/", "path")
os.chdir(working_dir)

def main():
    lvl1 = ['Typ','GFP2']
    lvl2 = ['A0','A1']
    # lvl3 = ['SCAN','MBIST']
    
    project = input("Enter project: ")
    if project not in lvl1:
        print("Project name not found")
        return
    
    stepping = input("Enter Stepping: ")
    if stepping not in lvl2:
        print("Stepping not found")
        return

    thirdlvl = input("Enter SCAN/MBIST: ")
    
    src = os.path.join(project, stepping, thirdlvl)
    print("src", src)
    
    if not os.path.exists(src):
        print("Src not exists")

main()

Вы даже можете автоматизировать этот процесс, позволив os.listdir() перечислить все подпапки за вас.

import os, shutil

working_dir = os.path.join("C:/", "path")
os.chdir(working_dir)

def main():    
    project = input("Enter project: ")
    lvl1 = os.listdir(working_dir) # list all the directories under the working directory.
    if project not in lvl1:
        print("Project name not found")
        return # if you want to exit when not finding the project folder.
    
    stepping = input("Enter Stepping: ") # list all the directories under the project directory.
    lvl2 = os.listdir(os.path.join(working_dir, project))
    if stepping not in lvl2:
        print("Stepping not found")
        return # if you want to exit when not finding the stepping folder.
        
    thirdlvl = input("Enter SCAN/MBIST: ")
    
    src = os.path.join(project, stepping, thirdlvl)
    print("src", src)
    
    if not os.path.exists(src):
        print("Src not exists")

main()
0
dull-bird 5 Окт 2020 в 04:02