Как скопировать несколько файлов в несколько папок с помощью Python - PullRequest
0 голосов
/ 21 октября 2019

У меня есть несколько файлов в одной папке (1_ppt.csv, 2_ppt.csv, 3_ppt.csv, ...). У меня их соответствующие пустые папки как (SIM1, SIM2, SIM3, ...). Я хочу скопировать 1_ppt.csv в папку SIM1, 2_ppt.csv в папку SIM2, и так далее. Я попробовал это с помощью команды cmd, это работает;однако, это требует, чтобы имена файлов и папок были одинаковыми, поэтому это бесполезно. Я буду очень признателен, если смогу получить решение Python для этого.

До сих пор использовали эти команды cmd.

[for %i in (*) do mkdir "%~ni"]
[for %i in (*) do move "%i" "%~ni"]

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Предполагая, что дерево файлов выглядит следующим образом:

|--PPTs
|   |--1_ppt.csv
|   |--2_ppt.csv
|   .
|   .
|   |--n_ppt.csv
|--SIM1
|--SIM2
.
.
|--SIMN
|--script.py

Вы можете сделать следующее:

from pathlib import Path
import shutil

base_path = Path.cwd()
ppt_path = base_path.joinpath('PPTs')
for ppt in ppt_path.iterdir():
    ppt_num = ppt.name.split('_')[0]
    out_path = base_path.joinpath(f'SIM{ppt_num}', ppt.name) # e.g. SIM1/ppt_1.csv
    shutil.copy(ppt, out_path)

Вы также можете создавать каталоги на лету, изменив цикл for:

for ppt in ppt_path.iterdir():
    ppt_num = ppt.name.split('_')[0]
    out_folder = base_path.joinpath(f'SIM{ppt_num}')
    # Add this line
    out_folder.mkdir(exist_ok=True)
    out_path = out_folder.joinpath(ppt.name) # e.g. SIM1/ppt_1.csv
    shutil.copy(ppt, out_path)
0 голосов
/ 21 октября 2019
import os
import shutil
src=""
src_files = os.listdir(src)
i=0
for file_name in src_files:
   full_file_name = os.path.join(src, file_name)
   if os.path.isfile(full_file_name)& full_file_name.endswith("_ppt.csv"):
     i+=1
     dirName="SIM"+str(i)
     try:
     # Create target Directory
       os.mkdir(dirName)
     except FileExistsError:

    if not os.path.exists(dirName):
       os.mkdir(dirName)  

    shutil.copy(full_file_name, dirName)

Поместите этот файл python туда, куда вы хотите, чтобы ваши папки на SIM-карте шли, и поместите src, где находится ваша одна папка.

...