【问题标题】:How do I combine multiple CSV files into one excel files with different sheets using Python如何使用 Python 将多个 CSV 文件合并为一个具有不同工作表的 excel 文件
【发布时间】:2019-12-09 18:05:26
【问题描述】:

我正在尝试将多个 csv 文件合并到一个 excel 文件中,其中每个文件都是 xls 文件中自己的工作表。

下面是一个python脚本,可以将文件夹中的所有csv文件转换成相应的excel文件。

   import os
   import glob
import csv
from xlsxwriter.workbook import Workbook
"""with open('output.csv', "rt", encoding = 'UTF-8') as fin:
    with open('outputconvert.csv', "wt", encoding = 'UTF-8') as fout:
        for line in fin:
            fout.write(line.replace(';',','))"""

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    workbook = Workbook(csvfile[:-4] + '.xlsx')
    worksheet = workbook.add_worksheet('testws')
    with open(csvfile, 'rt', encoding='utf8') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet.write(r, c, col)
    workbook.close()

它工作正常,但有没有一种方法可以扩展它,以便它可以将文件合并到一个文件中,每个文件都在一个单独的工作表中

提前致谢

【问题讨论】:

    标签: python csv xlsxwriter


    【解决方案1】:

    可以从目录中加载 .csv 文件,然后使用以下代码将它们全部合并到一个 .xlsx excel 文件中:

    import pandas as pd
    import sys
    import os
    import glob
    from pathlib import Path
    
    extension = 'csv'
    all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
    
    writer = pd.ExcelWriter('fc15.xlsx') # Arbitrary output name
    for csvfilename in all_filenames:
    
        # in case your locale settings use , instead of a dot
        txt = Path(csvfilename).read_text()
        txt = txt.replace(',', '.')
    
        text_file = open(csvfilename, "w")
        text_file.write(txt)
        text_file.close()
        
        print("Loading "+ csvfilename)
        df= pd.read_csv(csvfilename,sep=';', encoding='utf-8')
    
        df.to_excel(writer,sheet_name=os.path.splitext(csvfilename)[0])
        print("done")
    writer.save()
    print("task completed")
    

    【讨论】:

      【解决方案2】:

      参数 sheet_name 是常量。要导出到多个工作表,您需要为每个工作表指定不同的名称。 这是经过测试的解决方案:

      workbook = Workbook('../your_path/joined.xlsx')
      counter = 0
      for csv_file in glob.glob(os.path.join('../your_path/', '*.csv')):
          sheet_name = 'Sheet_' + str(counter)
          counter += 1
          worksheet = workbook.add_worksheet(sheet_name)
          with open(csv_file, 'rt', encoding='utf8') as f:
              reader = csv.reader(f)
              for r, row in enumerate(reader):
                  for c, col in enumerate(row):
                      worksheet.write(r, c, col)
      workbook.close()
      

      【讨论】:

        【解决方案3】:

        您正在通过这样做创建离散的 xlxs 文件;

        for csvfile in glob.glob(os.path.join('.', '*.csv')):
            workbook = Workbook(csvfile[:-4] + '.xlsx')
        

        相反,您应该在 for 循环之外创建文件(工作簿对象),只创建一次,然后在循环中创建新工作表。

        这应该可行

        import os
        import glob
        import csv
        from xlsxwriter.workbook import Workbook
        """with open('output.csv', "rt", encoding = 'UTF-8') as fin:
            with open('outputconvert.csv', "wt", encoding = 'UTF-8') as fout:
                for line in fin:
                    fout.write(line.replace(';',','))"""
        
        workbook = Workbook('name_your_file.xlsx')
        for csvfile in glob.glob(os.path.join('.', '*.csv')):
            worksheet = workbook.add_worksheet('testws')
            with open(csvfile, 'rt', encoding='utf8') as f:
                reader = csv.reader(f)
                for r, row in enumerate(reader):
                    for c, col in enumerate(row):
                        worksheet.write(r, c, col)
            workbook.close()
        

        【讨论】:

          【解决方案4】:

          为每个 csv 文件创建数据框并将其作为单独的工作表复制到一个 excel 中。

          请参考以下链接。

          https://xlsxwriter.readthedocs.io/example_pandas_multiple.html

          【讨论】:

            猜你喜欢
            • 2022-07-04
            • 1970-01-01
            • 2017-12-24
            • 2021-12-17
            • 1970-01-01
            • 1970-01-01
            • 2018-07-24
            • 1970-01-01
            • 2020-11-27
            相关资源
            最近更新 更多