使用Python创建文件夹结构

2024-09-30 03:23:19 发布

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

我正在寻找在Python中创建文件夹结构的支持。我有基本的Python知识,但试图了解它如何能够自动化一些普通任务

我有一个xlxs,其中有1000个名称,与我的Python脚本names.xlxs位于同一目录中。这些是它的标题

enter image description here

我想为列表中的每个人创建一个包含姓名和导师组的文件夹,在该文件夹中,我还想创建以下子文件夹

AoW
CSP
Folder A
Folder B
Folder C
Folder D
Folder E
Folder F

有人能给我指出正确的方向,最好的方法吗


Tags: 目录脚本文件夹名称标题列表namesfolder
3条回答

读取XLXS文件,可以考虑使用^ {CD1>}{A1}。将文件读入pandas DataFrame后,可以遍历行并选择名称和导师组。完成此步骤后,您可以使用内置python库os并使用os.makedir(path/to/dir/new_dir_name)在特定路径上创建目录。其中,directory new_dir_name是为每个数据帧行获取的值的串联

让我们试试pathlib,这使使用文件系统变得轻而易举。注意,您将需要Python3.5+来使用它

设置

import pandas as pd
from pathlib import Path 


df = pd.DataFrame({'Name' : 'Joe Bloggs', 'Tutor Group' : '6T1'},index=[0])


sub_folders = ['AoW',
 'CSP',
 'Folder A',
 'Folder B',
 'Folder C',
 'Folder D',
 'Folder E',
 'Folder F']

假设您知道如何将Excel文件读入数据框,并且它与以下内容大致相似:

         Name Tutor Group
0  Joe Bloggs         6T1

我们可以使用一个接受许多参数的函数来写出目标目录中的路径

我们还可以检查我们正在创建的路径是否存在,如果不存在,我们可以创建它,如果它存在,我们可以通过它

def create_folders(dataframe, agg_columns, sub_folders,root_path):
    p = Path(root_path)
    
    series = dataframe[agg_columns].agg('-'.join,1)
    
    for person in series:
        trg_path = p.joinpath(person)
        if not trg_path.is_dir():
            trg_path.mkdir(parents=True)
        
        for path in sub_folders:
            if not trg_path.joinpath(path).is_dir():
                trg_path.joinpath(path).mkdir()
            
    

使用中

create_folders(df,['Name','Tutor Group'], sub_folders, 'source')

enter image description here

注意事项

就我个人而言,如果你还不知道的话,我也会利用这个机会来学习login是如何工作的。因此,当您创建这些目录时,您有一个创建内容的日志,以及出现任何问题的时间

我使用csv示例而不是excel文件,但如果需要,可以为此目的进行修改

对于输入文件:

Name,Tutor Group
A,1
B,1
C,1
D,2
E,2
  • 获取py文件的当前工作目录,并使用pandas读取文件
import pandas as pd
import os

dirname = os.path.dirname(__file__)
file = f"{dirname}/input.csv"
df = pd.read_csv(file, sep=",")
  • 然后获取每组的人员列表
group_person_dict = df.groupby("Tutor Group")["Name"].apply(list).to_dict()

# {
#   "1": ["A", "B", "C"],
#   "2": ["D","E"]
# }
  • 定义常量子文件夹集
  • 迭代字典,生成路径字符串,如果不存在,则创建
# define dub folders
sub_folder_set = {
    "AoW",
    "CSP",
    "Folder A",
    "Folder B",
    "Folder C",
    "Folder D",
    "Folder F",
    "Folder E",
}

for group, people in group_person_dict.items():
    g = str(group)
    for p in people:
        # obtain name+group concatanated string
        folder_name = f"TutorGroup={g}-Person={p}"
        # build main directory path, create if not exists
        dir_path = os.path.join(dirname, folder_name)
        if not os.path.exists(dir_path):
            os.mkdir(dir_path)

        # iterate ovr subfolders
        for sbf in sub_folder_set:
            # obtain sub directory path, create if not exists
            subdir_path = os.path.join(dir_path, sbf)
            if not os.path.exists(subdir_path):
                os.mkdir(subdir_path)

输出: enter image description here

相关问题 更多 >

    热门问题