【问题标题】:Python - Create multiple folders from an excel column listPython - 从excel列列表创建多个文件夹
【发布时间】:2018-05-15 00:24:59
【问题描述】:

我基本上是想让 Python 在一个目录中创建一堆文件夹,每个文件夹的名称都基于 Excel 文件中的列表。该列表位于 D 列中,其标题为“文件夹名称”。

我已经能够对单个单元格执行此操作,但很难弄清楚如何为多个单元格执行此操作。我到目前为止的代码如下。

非常感谢您的帮助 - 我对此很陌生!`

import os
import openpyxl


def folder_creation(EXCEL_FILE_DIRECTORY, FOLDER_CREATION_LOCATION, EXCEL_FILE_NAME):
   os.chdir (EXCEL_FILE_DIRECTORY)
   workbook = openpyxl.load_workbook (EXCEL_FILE_NAME)
   sheet = workbook.get_sheet_by_name ('Sheet1')
   folderName = sheet ['D2'].value
   baseDir = FOLDER_CREATION_LOCATION 
   os.makedirs(os.path.join(baseDir, folderName))
   print ("\nFolder created in: ", os.path.join(baseDir, folderName))

【问题讨论】:

  • 你愿意使用pandas吗?您可能会发现更多人熟悉 pandas 语法与 openpyxl..
  • 我对此持开放态度 - 绝对。

标签: python excel pandas openpyxl


【解决方案1】:

您必须遍历所有列值。这对我有用(openpyxl v2.5):

def folder_creation(EXCEL_FILE_DIRECTORY, FOLDER_CREATION_LOCATION,  EXCEL_FILE_NAME):
    os.chdir(EXCEL_FILE_DIRECTORY)
    workbook = openpyxl.load_workbook(EXCEL_FILE_NAME)
    sheet = workbook.get_sheet_by_name('Sheet1')

    col_values = [cell.value for col in sheet.iter_cols(
        min_row=2, max_row=None, min_col=4, max_col=4) for cell in col]

    for value in col_values:       
        folderName = value
        baseDir = FOLDER_CREATION_LOCATION
        os.makedirs(os.path.join(baseDir, folderName))
        print("\nFolder created in: ", os.path.join(baseDir, folderName))

【讨论】:

  • 好的,现在试试这个。会回来汇报的。谢谢
  • 这也行得通,它剪掉了标题,这就更好了。最后我仍然收到错误消息:TypeError: join() argument must be str or bytes, not 'NoneType'
  • 我是否收到错误,因为它正在到达列的末尾,意识到它是空白的并且失败了?仅供参考 - 它创建了我的文件夹然后弹出错误。
  • 我得到的唯一错误是您正在使用已弃用的 openpyxl 命令:调用已弃用的函数 get_sheet_by_name (Use wb[sheetname])
  • 也许可以在创建文件夹的 for 循环周围添加一个 try/except 块(以捕获 TypeError )?
【解决方案2】:

for 循环?

import os
import openpyxl


def folder_creation(EXCEL_FILE_DIRECTORY, FOLDER_CREATION_LOCATION, EXCEL_FILE_NAME):
   os.chdir (EXCEL_FILE_DIRECTORY)
   workbook = openpyxl.load_workbook (EXCEL_FILE_NAME)
   sheet = workbook.get_sheet_by_name ('Sheet1')
   baseDir = FOLDER_CREATION_LOCATION 
   col = sheet['D']

   for cell in col:
        folderName = cell.value
        os.makedirs(os.path.join(baseDir, folderName))
        print ("\nFolder created in: ", os.path.join(baseDir, folderName))

【讨论】:

  • 所以,这确实有效并创建了文件夹,但返回错误:TypeError: join() argument must be str or bytes, not 'NoneType'
  • 这是因为它到达了列的末尾,意识到它是空白的并且失败了吗?仅供参考 - 它创建了我的文件夹然后弹出错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
相关资源
最近更新 更多