【问题标题】:Batch convert CSV to XLSX keeping subfolder structure in python将 CSV 批量转换为 XLSX,在 python 中保留子文件夹结构
【发布时间】:2020-02-27 16:05:09
【问题描述】:

有人可以建议我如何将 100 多个具有不同架构的 CSV 文件批量转换为使用 Python 保持原始子文件夹结构的单个 XLSX 文件?简而言之,我需要得到什么:

Folder:
  Subfolder 1:
  file.csv
  Subfolder 2:
  file2.csv
  ...
  Subfolder N:
  fileN.csv

目标:

Folder:
  Subfolder 1:
  file.csv
  file.xlsx
  Subfolder 2:
  file2.csv
  file2.xlsx
  ...
  Subfolder N:
  fileN.csv
  fileN.xlsx

文件名不统一。

我正在尝试下面的代码,但它只是转换根文件夹中的文件。

for root, dirs, files in os.walk('.'):
    for file in files:
        for file in glob.glob(os.path.join('.', '*.csv')):
            wb = openpyxl.Workbook()
            ws = wb.active
            with open(os.path.join(file), 'r') as f:
                reader = csv.reader(f)
                for r, row in enumerate(reader, start=1):
                    for c, val in enumerate(row, start=1):
                        ws.cell(row=r, column=c).value = val
            wb.save(csvfile + '.xlsx')

【问题讨论】:

  • 这能回答你的问题吗? How to use glob() to find files recursively?
  • @MauriceMeyer 我也无法使用递归。
  • 出了什么问题,你在哪个部分苦苦挣扎?
  • @AMC,已经有了解决方案,谢谢!
  • @umidjon 找到解决方案很棒,但这不是唯一重要的事情,对吧?

标签: python csv type-conversion xlsx


【解决方案1】:

剪裁代码,我能够让它工作。不是最整洁的,但有效:

for root, dirs, files in os.walk('.'):
    for file in files:
        if os.path.splitext(file)[-1] == ".csv":
            file_path = os.path.join(root, file)
            wb = openpyxl.Workbook()
            ws = wb.active
            with open(os.path.join(file_path), 'r') as f:
                reader = csv.reader(f)
                for r, row in enumerate(reader, start=1):
                    for c, val in enumerate(row, start=1):
                        ws.cell(row=r, column=c).value = val
            wb.save(file_path + '.xlsx')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 2020-03-29
    • 2020-03-05
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多