Как найти все файлы с одинаковым расширением в нескольких подкаталогах и переместить их в отдельную папку, используя python? - PullRequest
0 голосов
/ 24 октября 2019

Я скопировал содержимое более старой видеокамеры на мой компьютер, в папку, в которую было перенесено более 100 подпапок, все из которых содержат 6 или 7 файлов, которые я хочу. Как мне найти все файлы и переместить все найденные файлы в новую папку? Я довольно новичок в этом, поэтому любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

У dswdsyd есть правильный ответ, хотя вы можете изменить распечатку, чтобы фактически переместить файлы следующим образом:

import os

path = 'C:\\location_to_root_folder\\'
newpath = 'C:\\NewPath\\'

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.mpg' in file:
            files.append(os.path.join(r, file))

for f in files:
    os.rename(f, newpath + f.split('/')[-1])
    print(f'{f.split('/')[-1]} moved to {newpath}')
1 голос
/ 24 октября 2019

Чтобы найти все файлы, существует 2 подхода:

  1. Использование os.walker

Пример:

import os

path = 'c:\\location_to_root_folder\\'

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.mpg' in file:
            files.append(os.path.join(r, file))

for f in files:
    print(f)
Использовать глоб Пример:
import glob

path = 'c:\\location_to_root_folder\\'

files = [f for f in glob.glob(path + "**/*.mpg", recursive=True)]

for f in files:
    print(f)

Для перемещения вы можете использовать любой из 3 подходов, приведенных ниже, лично я предпочитаю shutil.move:

import os
import shutil

os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
...