【问题标题】:Python/Excel - Merge .xlsx workbooks from file into .csvPython/Excel - 将 .xlsx 工作簿从文件合并到 .csv
【发布时间】:2014-10-01 19:43:54
【问题描述】:

尝试将文件中的多个 .xlsx 工作簿编译成单个 .csv

我创建的循环只是从文件中捕获第一个工作簿。

如何更改它以捕获文件中的所有工作簿?数据仅在所有工作簿的 Sheet1 上

import os
import xlrd
import csv

rootdir = r'C:\Users\username\Desktop\Mults'
filenames = []
for subdir, dir, files in os.walk(rootdir):
   for file in files:
      filenames.append(os.path.join(subdir, file))
      wb = xlrd.open_workbook(os.path.join(subdir, file))
      sh = wb.sheet_by_index(0)
      with open('acit_multsTEST.csv','wb') as f:
        c = csv.writer(f)
        for r in range(sh.nrows):
            c.writerow(sh.row_values(r))

感谢您的帮助!

谢谢!

【问题讨论】:

  • 根目录下是否有包含工作簿的子目录?如果没有,那么您不需要使用walk,但可以使用glob

标签: python excel csv export-to-csv xlrd


【解决方案1】:

所以你必须执行以下操作。

  • 获取所有工作簿的列表
  • 打开一个主 csv 以将所有数据附加到
  • 遍历您的工作簿列表
  • 将每张工作表附加到您的 csv 文件中

    import glob
    import os
    import xlrd
    import csv
    
    ROOTDIR = r'C:\Users\username\Desktop\Mults'
    wb_pattern = os.path.join(ROOTDIR, '*.xlsx')
    
    workbooks = glob.glob(wb_pattern)
    
    with open('out.csv', 'wb') as outcsv:
        writer = csv.writer(outcsv)
        for wb in workbooks:
            book_path = os.path.join(ROOTDIR, wb)
            book =  xlrd.open(book_path)
            sheet = book.sheet_by_index(0)
            for row_num in xrange(sheet.nrows):
               row = sheet(row_num) 
               writer.writerow(row)
    

【讨论】:

  • 太棒了!谢谢!那行得通。现在我只需要格式化数据。我很感激。
  • 看起来只是os.path.walk出错了,然后?
  • 递归在最好的时候很棘手,在这种情况下不需要。使用glob 简化它似乎是明智的。我认为您将其移出循环的建议应该可行,但是当操作仍然卡住时,我认为最好重新开始。
  • @MikeV。在 csv 中格式化数据应该不是必需的。我通常会依靠消耗数据的任何东西来担心格式化它。 csv有什么用?数据库负载?
  • @b10n 是的,这是为了数据库负载。我所说的格式化是指在提取过程中格式化数据。每个电子表格都有一个 2 行标题,非常适合在工作簿的编译过程中排除。使数据数组变成统一的列。
猜你喜欢
  • 2016-04-15
  • 2014-09-07
  • 2018-11-23
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多