Как создать новый лист в Excel для каждого файла CSV в моей папке - PullRequest
2 голосов
/ 03 августа 2020
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

Ответы [ 2 ]

4 голосов
/ 03 августа 2020
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 по тому же пути, что и ваша папка.

1 голос
/ 03 августа 2020

Он перезаписывает существующий файл Excel, потому что ExcelWriter определен внутри l oop. Вам нужно создать Excel только один раз, определив его за пределами l oop и добавив к ним листы с помощью l oop. Приведенный ниже код работал у меня

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() 

  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...