【问题标题】:python: creating excel workbook and dumping csv files as worksheetspython:创建excel工作簿并将csv文件转储为工作表
【发布时间】:2011-08-08 00:21:47
【问题描述】:

我有几个 csv 文件,我想将它们作为新工作表转储到 excel 工作簿 (xls/xlsx) 中。 我如何做到这一点?

谷歌搜索并找到“pyXLwriter”,但似乎该项目已停止。 虽然我正在尝试“pyXLwriter”,但想知道是否有任何替代方案/建议/模块?

非常感谢。

[编辑]

这是我的解决方案:(有人有更精简、更 Python 的解决方案吗?请发表评论。谢谢)

import glob
import csv
import xlwt
import os

wb = xlwt.Workbook()


for filename in glob.glob("c:/xxx/*.csv"):
    (f_path, f_name) = os.path.split(filename)
    (f_short_name, f_extension) = os.path.splitext(f_name)
    ws = wb.add_sheet(str(f_short_name))
    spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"')
    row_count = 0
    for row in spamReader:
        for col in range(len(row)):
            ws.write(row_count,col,row[col])
        row_count +=1

wb.save("c:/xxx/compiled.xls")

print "Done"

【问题讨论】:

  • 试试 Sikuli。这是一个 Jython 项目,但您可以使用它来自动执行任何 GUI 任务。
  • 小心。 Xlwt 将输入数量限制为 65,556。但是,如果您有更多的行数,请选择 xlsxwriter

标签: python excel csv xlrd xlwt


【解决方案1】:

这是基于您的答案本身的答案。但我使用 xlsxwriter 的原因是,它接受更多 xlsx 格式的数据。其中 xlwt 将您限制为 65556 行和 xls 格式。

import xlsxwriter
import glob
import csv
workbook = xlsxwriter.Workbook('compiled.xlsx') 
for filename in glob.glob("*.csv"):
    ws = workbook.add_worksheet(str(filename.split('.')[0]))
    spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"')
    row_count = 0
    print filename
    for row in spamReader:
        for col in range(len(row)):
            ws.write(row_count,col,row[col])
        row_count +=1

workbook.close()

【讨论】:

    【解决方案2】:

    使用xlsxwriter在python中创建并写入excel文件。

    安装方式:pip install xlsxwriter

    import xlsxwriter
    
    
    # Create an new Excel file and add a worksheet.
    workbook = xlsxwriter.Workbook('demo.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Widen the first column to make the text clearer.
    worksheet.set_column('A:A', 20)
    
    # Add a bold format to use to highlight cells.
    bold = workbook.add_format({'bold': True})
    
    # Write some simple text.
    worksheet.write('A1', 'Hello')
    
    # Text with formatting.
    worksheet.write('A2', 'World', bold)
    
    # Write some numbers, with row/column notation.
    worksheet.write(2, 0, 123)
    worksheet.write(3, 0, 123.456)
    
    # Insert an image.
    worksheet.insert_image('B5', 'logo.png')
    
    workbook.close()
    

    【讨论】:

      【解决方案3】:

      也可在 GitHub 存储库“Kampfmitexcel”中找到...

      import csv, xlwt, os
      
      def input_from_user(prompt):
          return raw_input(prompt).strip()
      
      def make_an_excel_file_from_all_the_txtfiles_in_the_following_directory(directory):
          wb = xlwt.Workbook()
          for filename in os.listdir(data_folder_path):
              if filename.endswith(".csv") or filename.endswith(".txt"):
                  ws = wb.add_sheet(os.path.splitext(filename)[0])
                  with open('{}\\{}'.format(data_folder_path,filename),'rb') as csvfile:
                      reader = csv.reader(csvfile, delimiter=',')
                      for rowx, row in enumerate(reader):
                          for colx, value in enumerate(row):
                              ws.write(rowx, colx, value)
          return wb
      
      if __name__ == '__main__':
          path_to_data = input_from_user("Where is the data stored?: ")
          xls = make_an_excel_file_from_all_the_txtfiles_in_the_following_directory(path_to_data)
          xls_name = input_from_user('What do you want to name the excel file?: ')
          xls.save('{}\\{}{}'.format(data_folder_path,xls_name,'.xls'))
          print "Your file has been saved in the data folder."
      

      【讨论】:

        【解决方案4】:

        不确定所说的“更精简、更 Pythonic”是什么意思,但你当然可以稍微修饰一下:

        import glob, csv, xlwt, os
        wb = xlwt.Workbook()
        for filename in glob.glob("c:/xxx/*.csv"):
            (f_path, f_name) = os.path.split(filename)
            (f_short_name, f_extension) = os.path.splitext(f_name)
            ws = wb.add_sheet(f_short_name)
            spamReader = csv.reader(open(filename, 'rb'))
            for rowx, row in enumerate(spamReader):
                for colx, value in enumerate(row):
                    ws.write(rowx, colx, value)
        wb.save("c:/xxx/compiled.xls")
        

        【讨论】:

          【解决方案5】:

          您将在xlwt tutorial 中找到所需的一切。这个库 (xlrd and xlwt) 是在 Python 中管理 Excel 交互的最流行的选择。缺点是,目前它们只支持 Excel 二进制格式 (.xls)。

          【讨论】:

          • 是的,正在阅读教程 pdf。点击了一个想法,我可以在其中创建包含许多工作表的 xls 文件,并使用 python csv 阅读器模块/方法将逐行转储到工作表中。 :)
          • 是的,这就是这个想法。我建议您在需要时创建工作表,而不是事先创建。
          • xlwt 教程链接已损坏
          【解决方案6】:

          我总是只是通过字符串编写 Office 2003 XML 格式。与编写和压缩构成 xlsx 文档的内容相比,这很容易做到,也更容易管理。它也不需要任何外部库。 (尽管人们可以很容易地自己滚动)

          此外,Excel 支持加载 CSV 文件。空格分隔或字符分隔。您可以直接加载它,也可以尝试复制并粘贴它,然后按选项中的“文本到列”按钮。当然,这个选项与python无关。

          【讨论】:

          • 谢谢.. 但如果我有 20 多个 csv,我将一个一个打开并进行剪切和粘贴.. 呵呵 :)
          • 为了得到一个我可以玩的空白模板文件,我打开 Excel,在 A1 中输入 Test,然后在空白电子表格上使用另存为,选择 XML Spreadsheet 2003 作为文件类型,然后给它一个姓名。当您看到它的 XML 结构时,您就会知道该怎么做。
          • 这听起来很有趣!
          猜你喜欢
          • 2014-09-07
          • 1970-01-01
          • 2018-02-26
          • 2015-09-07
          • 2019-10-26
          • 2019-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多