【发布时间】:2021-10-09 11:10:47
【问题描述】:
我正在尝试编写一个简短的脚本,该脚本将识别文件夹结构中的所有 csv 文件,然后将每个文件放入单独的工作表中,并为它们提供父文件夹名称。
这是我尝试过的:
import pandas as pd
import os as os
import xlsxwriter
import openpyxl
input_dir = r"C:\..."
for root, dirs, files in os.walk(input_dir):
for file in files:
df = []
if file.endswith('{}'.format('csv')):
writer = pd.ExcelWriter(out.xlsx,
engine='xlsxwriter')
sheet_name = os.path.join(root.split('\\')[6], root.split('\\')[7])
new_name = sheet_name.replace('\\', '-')
df = pd.read_csv(os.path.join(root, file))
df.to_excel(writer, sheet_name=new_name, index=False)
writer.save()
它确实将 csv 插入到 xlsx 并给出正确的名称,但它每次都会覆盖数据,我只得到文件夹中的最后一个 csv。
有什么建议吗?
谢谢
【问题讨论】:
-
如果同一个文件夹中有多个 csv,它们将被赋予相同的名称(因为您的名称是基于父文件夹的),因此会相互覆盖,因为工作表名称必须是唯一的。当同一个文件夹中有多个 csv 文件时,你想发生什么?
-
您的主要问题是您每次创建
writer对象实际上是在每次迭代中编写一个新的excel。正如@AlfredRodenboog 所说,您需要概述在单个父文件夹中处理多个 CSV 的规则。 -
同一个文件夹中没有多个 cvs。每个文件夹只有 1 个