Перемещение файлов

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
Код:
import os,shutil 
if not os.path.isdir('d:\\12\\2\\3'):
     os.makedirs('d:\\12\\2\\3')
for folderName, subfolders, filenames in os.walk('D:\\2'):   
    for filename in filenames:
        print('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
        shutil.move((folderName + '\\' + filename), 'd:\\12\\2\\3')
Программа выполняет обход дерева папок и выбирает все файлы. После этого перемещает их в другую папку Если файлы имеют разные имена, все хорошо. Если имена совпадают выдается ошибка. Как сделать, чтобы при совпадении имен происходило изменение имени путем добавления цифры.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Про что почитать? что не понятно?

Вот комментарии к коду:
Python:
import os
import shutil
new_path = 'd:\\12\\2\\3'
if not os.path.isdir(new_path):
    os.makedirs(new_path)
for folderName, subfolders, filenames in os.walk('D:\\2'):
    for filename in filenames:
        if filename.endswith(".txt"):
            print('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
            # В счетчик записываем индекс, который надо приписать к файлу
            counter = 0
            # В переменную filename записываем название файла, а в extension расширение
            filename, extension = filename.rsplit('.', 1)
            # Создаем переменную которая содержит новое название файла (после копирования)
            new_file_name = f"{filename}.{extension}"
            # Пока файл с новым названием есть в конечной папке...
            while new_file_name in os.listdir(new_path):
                # Увеличиваем счетчик
                counter += 1
                # Создаем название файла вида "файл (3).txt"
                new_file_name = f"{filename} ({counter}).{extension}"
            shutil.move((folderName + '\\' + f"{filename}.{extension}"),
                        new_path + '\\' + new_file_name)

P.s. исправил еще один недочет, должно работать
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
например через try / except
 

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
Python:
import os,shutil
if not os.path.isdir('d:\\12\\2\\3'):
     os.makedirs('d:\\12\\2\\3')
for folderName, subfolders, filenames in os.walk('D:\\2'):
     for filename in filenames:
          if filename.endswith(".txt"):
               print('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
               ('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
               aa = filename # перебираются по очереди все файлы в изначальной папке
               print ('aa=', aa)
               test = os.listdir('d:\\12\\2\\3')
               for bb in test:
                    print ('bb=',bb) # перебираются по очереди все файлы в конечной папке
                    if bb == aa:
                         print ('item=', bb)
                         #os.rename(aa, aa + 23) # изменяется имя совпадающего файла в конечной папке
               shutil.move((folderName + '\\' + filename), 'd:\\12\\2\\3')

изменил вот так. Теперь он сравнивает два файла. Не нашел как изменить имя файла добавив цифру в скобках. Причем так, чтобы если совпадет снова, то добавив следующую цифру. Как пример : а, а(1). а (2)
 
Последнее редактирование модератором:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Как-то так:
Python:
import os, shutil

new_path = 'd:\\12\\2\\3'
if not os.path.isdir(new_path):
     os.makedirs(new_path)

for folderName, subfolders, filenames in os.walk('D:\\2'):
     for filename in filenames:
          if filename.endswith(".txt"):
               print('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
               counter = 0
               filename, extension = filename.rsplit('.', 1)
               new_file_name = f"{filename}.{extension}"
               while new_file_name in os.listdir(new_path):
                    counter += 1
                    new_file_name = f"{filename} ({counter}).{extension}"

               shutil.move((folderName + '\\' + filename), new_path + '\\' + new_file_name)
 
Последнее редактирование:

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
Как-то так:
Python:
import os, shutil

new_path = 'd:\\12\\2\\3'
if not os.path.isdir(new_path):
     os.makedirs(new_path)

for folderName, subfolders, filenames in os.walk('D:\\2'):
     for filename in filenames:
          if filename.endswith(".txt"):
               print('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
               counter = 0
               new_file_name = filename
               while new_file_name in os.listdir(new_path):
                    counter += 1
                    new_file_name = f"{filename} ({counter})"

               shutil.move((folderName + '\\' + filename), new_path + '\\' + new_file_name)
В папке 2 есть два файла 1 и 2 и папка 1 с файлом 1. При выполнении программы переносится файлы 1 и 2 из второй папки, из первой папки нечего не происходит. Программа просто зависает.
 
Последнее редактирование модератором:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
В папке 2 есть два файла 1 и 2 и папка 1 с файлом 1. При выполнении программы переносится файлы 1 и 2 из второй папки, из первой папки нечего не происходит. Программа просто зависает.
Сори, поправил
 

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
Осталась последняя проблема Превращает тестовый файл 1,txt в просто файл 1.txt.(0).
new_file_name = f"{filename} ({counter})" где можно про это прочитать.
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Осталась последняя проблема Превращает тестовый файл 1,txt в просто файл 1.txt.(0).
new_file_name = f"{filename} ({counter})" где можно про это прочитать.
Исправил
 

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
выдает ошибку. Где можно почитать, чтобы понять логику последних ваших действий?
 
Последнее редактирование:

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
Про что почитать? что не понятно?

Вод комментарии к коду:
Python:
import os
import shutil
new_path = 'd:\\12\\2\\3'
if not os.path.isdir(new_path):
    os.makedirs(new_path)
for folderName, subfolders, filenames in os.walk('D:\\2'):
    for filename in filenames:
        if filename.endswith(".txt"):
            print('ФАЙЛ В ПАПКЕ ' + folderName + '\\' + filename)
            # В счетчик записываем индекс, который надо приписать к файлу
            counter = 0
            # В переменную filename записываем название файла, а в extension расширение
            filename, extension = filename.rsplit('.', 1)
            # Создаем переменную которая содержит новое название файла (после копирования)
            new_file_name = f"{filename}.{extension}"
            # Пока файл с новым названием есть в конечной папке...
            while new_file_name in os.listdir(new_path):
                # Увеличиваем счетчик
                counter += 1
                # Создаем название файла вида "файл (3).txt"
                new_file_name = f"{filename} ({counter}).{extension}"
            shutil.move((folderName + '\\' + f"{filename}.{extension}"),
                        new_path + '\\' + new_file_name)

P.s. исправил еще один недочет, должно работать
Спасибо, все работает и понятно. Не могу понять только "new_file_name = f"{filename}.{extension}" Логика понятна но использовать не смогу не понимаю как работает в общем. Что можно почитать чтобы понять? Спасибо.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Спасибо, все работает и понятно. Не могу понять только "new_file_name = f"{filename}.{extension}" Логика понятна но использовать не смогу не понимаю как работает в общем. Что можно почитать чтобы понять? Спасибо.
Можешь поискать "f строки"
Вот например:
 
  • Мне нравится
Реакции: s591962

s591962

Новичок
Пользователь
Окт 12, 2021
130
3
18
Можешь поискать "f строки"
Вот например:
Большое спасибо
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов