如何使用Python复制多个文件夹中的多个文件

2024-10-03 00:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文件夹(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"]

Tags: 文件csvin命令文件夹名称cmdfor
2条回答
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放在一个文件夹所在的位置。你知道吗

假设文件树如下所示:

| 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)

相关问题 更多 >