Рекурсивный поиск файлов по маске + копирование файлов, поиск файлов по маске, копирование файлов

orlov1

Новичок
Пользователь
Июн 23, 2021
52
2
8
Доброго вечера.

Имеется код, который выполняет рекурсивный поиск в каталоге С:\\MyFolder и подкаталогах по маске (расширению) файла.

1. Подскажите как скопировать все найденные папки в каталог Find. В данном каталоге найденные файлы разложить по подкаталогам JPG и TXT соответственно расширениям найденных файлов
2. В данном случае в result.txt записывается только имя файла с расширением. Как записывать полный путь + файла с расширением.
3. Записывается текст в кодировке utf-8, имена файлов на русском отображаются корректно. При этом в консоли имена файлов на русском отображаются не корректно. Как установить кодировку для вывода в консоль ?
Collapsed
Wrap disabled
Line numbers off



import os
from os.path import expanduser
import shutil

path = 'С:\\MyFolder'

fnames = ([file for root, dirs, files in os.walk(path)
for file in files
if file.endswith('.jpg') or file.endswith('.txt') #or file.endswith('.pdf')
])

myfile = open ("C:\\result.txt", 'w', encoding='utf-8')

for fname in fnames:
print(fname)
myfile.write(fname + '\n')
myfile.close


Благодарю за помощь.
 

Vershitel_sudeb

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

программу положить рядом с папкой, в переменную dirname записать имя папки

Обязательно рядом должна быть папка Find с подпапками txt и jpg

Python:
from os import path
import os
from shutil import copy


def get_files(file_path):
    
    foo = os.listdir(file_path)
    
    foo = list(map(lambda x: file_path+"/"+x, foo))
    
    dirs = list(filter(path.isdir, foo))
    
    files = list(filter(path.isfile, foo))
    
    for file in files:
        
        with open("result.txt", 'a') as result:
        
            extension = file[file.rfind('.')+1:]
            
            if extension == 'txt':
            
                copy(file, "Find/txt/")
                
                result.write(file+"\n")
            
            elif extension == 'jpg':
                
                copy(file, "Find/jpg/")
    
    for dir in dirs:
        
        get_files(dir)
    


dirname = "info"

assert path.isdir(dirname)

get_files(dirname)

P.S. пишете если что - то не работает
 

orlov1

Новичок
Пользователь
Июн 23, 2021
52
2
8
Выдает ошибку:

Traceback (most recent call last):
File "test3.py", line 47, in <module>
get_files(dirname)
File "test3.py", line 29, in get_files
copy(file, "Find/txt/")
NameError: name 'copy' is not defined

Файлы с расширением txt в папке имеются.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
У тебя в импорте прописано
from shutil import copy
?

Ошибка в том, что имя copy не определено, значит либо нет этой строки, либо (мало вероятно) не установлена библиотека shutil
 

orlov1

Новичок
Пользователь
Июн 23, 2021
52
2
8
У тебя в импорте прописано
from shutil import copy
?

Ошибка в том, что имя copy не определено, значит либо нет этой строки, либо (мало вероятно) не установлена библиотека shutil
Нет, в импорте все в порядке.
Ошибка была в созданных папках для копирования.
Код работает.
Благодарю.
 
  • Мне нравится
Реакции: Vershitel_sudeb

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