Нужна помощь в проверке наличия нескольких символов подчеркивания в коллекции файлов — см. Код ниже

#python #sorting #if-statement

Вопрос:

Я работаю над проектом, в котором мне нужно отсортировать файлы .jpg и папки, содержащие файлы .jpg. У меня есть другие функциональные сценарии, которые я намерен включить в этот скрипт на python позже. Во-первых, я реализовал в первом приведенном ниже сценарии подсчет количества подчеркиваний в файле и принятие мер на основе результата, и это успешно работает. Мне нужна помощь в создании логики, которая будет проходить через файлы изображений .jpg, и если в файлах более одного подчеркивания, программа переместит файлы в папку с ошибками. Также мы будем очень признательны за любые отзывы о том, как оптимизировать этот скрипт!

 from pathlib import Path
import shutil, os, time, glob

timestr = time.strftime("%Y%m%d-%H%M%S")

folder = 'D:\test\testing'
working_folder = 'DitaTest1'
full_path = Path(os.path.join(folder, working_folder))
test_path = folder   '\'   working_folder

for file_path in full_path.iterdir():
    file_name = file_path.name
    result = file_name.count('_')

    if file_path.is_file():
        os.chdir(test_path)
        for file in glob.glob("*.jpg"):
            dst=test_path "\" file.replace(" ","_").replace(".jpg","") # .replace("Angle","").replace("Front","").replace("Side","")
            os.mkdir(dst)
            # print(dst)
            shutil.move(file,dst)
    elif result != 1:
        if not file_path.is_file():
            shutil.move(os.path.join(folder, working_folder, file_name), os.path.join(folder, working_folder   ' - dir-ERRORS_'   timestr, file_name))
        else:
            print('Ignored operation')
 

Ответ №1:

Вам нужно объяснить больше, чтобы мы могли лучше понять это, но из того, что я прочитал,

  1. Ваша логика «если» кажется неправильной, если вы хотите проверить количество подчеркиваний, вам не следует вводить эту логику elif . Вместо этого вам следует попробовать что-то подобное.
 for file_path in full_path.iterdir():
    file_name = file_path.name
    result = file_name.count('_')
    
    if os.path.isdir(file_path):
        pass
    else:
        if result == 1:
            os.chdir(test_path)
            for file in glob.glob("*.jpg"):
                dst=test_path "\" file.replace(" ","_").replace(".jpg","") # .replace("Angle","").replace("Front","").replace("Side","")
                os.mkdir(dst)
                # print(dst)
                shutil.move(file,dst)
        else:
            shutil.move(os.path.join(folder, working_folder, file_name), os.path.join(folder, working_folder   ' - dir-ERRORS_'   timestr, file_name))
 

Что делает этот код, так это перебирает папку, и если он найдет папку, он просто пройдет, а когда найдет файл, он проверит, есть ли result == 1 . Если это так, он переместит его в нужную папку, в противном случае он переместит его в папку с ошибкой. Если я допустил ошибку, дай мне знать.