【问题标题】:How do I create a new sheet in excel for every csv file I have in my folder如何在 excel 中为文件夹中的每个 csv 文件创建一个新工作表
【发布时间】:2020-11-23 18:32:45
【问题描述】:
import os
import pandas as pd
from glob import glob
import pathlib
import fileinput
import sys
import xlsxwriter

def csv_folder_input(folder):
    path = sys.path[0]
    path = path + "/" + folder
    os.chdir(path)
    counter = 1
    for filename in os.listdir(path):
        if filename.endswith(".csv"):
            with open(filename, 'r') as csvfile:
                df = pd.DataFrame(csvfile)
                with pd.ExcelWriter('output.xlsx') as writer:
                    df.to_excel(writer, sheet_name='sheet '+str(counter), index=False)
                    writer.save()
                    counter = counter + 1

目前它会覆盖每个 excel 文件表,但我希望每个 CSV 文件在 excel 上创建一个新表

【问题讨论】:

    标签: python excel pandas csv


    【解决方案1】:
    def csv_folder_input(folder):
        path = sys.path[0]
        path = os.path.join(path,folder)
        os.chdir(path)
        counter=1
        writer = pd.ExcelWriter('output.xlsx')
        for filename in os.listdir(path):
            if filename.endswith(".csv"):
                print(filename)
            with open(filename, 'r') as csvfile:
                counter=counter+1
                print(counter)
                df = pd.read_csv(csvfile)
                df.to_excel(writer,sheet_name=os.path.splitext(filename)[0]+'_'+str(counter),index=False)
        writer.save()
        writer.close()
        
    

    我刚刚修改了你的函数。请注意,要将您的 Dataframe 读入 csv, pd.read_csv() 是函数。

    您使用了 pd.DataFrame(csv_file),我认为这是错误的读取方式。

    您会在与文件夹相同的路径中找到您的 output.xlsx。

    【讨论】:

      【解决方案2】:

      它会重写现有的 Excel 文件,因为 ExcelWriter 是在循环内定义的。您只需通过在循环外部定义它来创建一个 excel,并且应该使用循环向它们添加工作表。下面的代码对我有用

      def csv_folder_input(folder):
      path = sys.path[0]
      path = path + "/" + folder
      os.chdir(path)
      counter = 1
      with pd.ExcelWriter('output.xlsx') as writer:
          for filename in os.listdir(path):
              if filename.endswith(".csv"):
                  with open(filename, 'r') as csvfile:
                      df = pd.DataFrame(csvfile)
                  df.to_excel(writer, sheet_name=filename, index=False)
                  print(f"Added sheet to excel: {filename}")
                  counter = counter + 1
      writer.save()
      writer.close() 
      
        
      

      【讨论】:

        猜你喜欢
        • 2018-07-27
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        相关资源
        最近更新 更多