【问题标题】:Create folder structures using Python使用 Python 创建文件夹结构
【发布时间】:2021-05-16 02:12:33
【问题描述】:

我正在寻找有关在 Python 中创建文件夹结构的支持。我有基本的 Python 知识,但试图了解它如何自动执行一些平凡的任务。

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

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

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

有人能指出最好的方法吗?

【问题讨论】:

  • 所有子文件夹都一样吗?
  • 每个人都有一个以他们命名的文件夹。这些文件夹中的每一个都包含以下空文件夹。 AoW CSP 文件夹 A 文件夹 B 文件夹 C 文件夹 D 文件夹 E 文件夹 F

标签: python pandas operating-system


【解决方案1】:

要读取 xlxs 文件,您可以考虑使用 pandas library。完成将文件读入 pandas DataFrame 后,您可以遍历行并选择姓名和导师组。此步骤完成后,您可以使用内置的python lib os 并使用os.makedir(path/to/dir/new_dir_name) 在特定路径创建目录。其中目录 new_dir_name 将是为每个 DataFrame 行获得的值的串联。

【讨论】:

    【解决方案2】:

    我处理的是 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)
    
    

    输出:

    【讨论】:

      【解决方案3】:

      让我们试试pathlib,它让使用文件系统变得轻而易举。请注意,您需要 Python 3.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')
      

      注意事项

      就个人而言,如果您还不知道,我也会借此机会了解login 的工作原理。因此,当您创建这些目录时,您会记录所创建的内容以及出现问题的时间。

      【讨论】: