python - 如何在 excel 中为文件夹中的每个 csv 文件创建一个新工作表
问题描述
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 上创建一个新表
解决方案
它重写了现有的 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()
推荐阅读
- python - 在 div 类中查找单词并保存/打印
- http - Terraform HTTP 无法正常工作,在 main.tf 第 1 行,数据“http”“示例”中出现错误
- javascript - 无法向 Google Smart Display 发送推送通知
- reactjs - 使用用户输入获取 API 的问题
- xaml - 与 Prism 导航绑定
- python - 使用 Python 从目录创建 zip
- reactjs - 如何自动从数据库中删除未经验证的用户?
- r - 如何根据条件将列添加到数据框中?(没有 ifelse)
- three.js - 下画布上的绘图模式以及如何在上画布而不是下画布上呈现控件
- flutter - Flutter - GraphQL 支持