简体   繁体   中英

How to import multiple csv files based on a list, and append them into multiple worksheets

I have multiple CSV files to be imported into multiple worksheets named in the same as the CSV file.

However, I have difficulties in creating/appending multiple worksheets.

If I use ExcelWriter(pathDestination, mode = 'a') , FileNotFoundError happens. If I use ExcelWriter(pathDestination) , then only the last CSV file will be created in the worksheet.

How shall I improve the code without the need of listing down each csvpath when doing the to_excel ?

import openpyxl
import numpy as np
import pandas as pd 
import os

pathDestination = 'Downloads/TemplateOne.xlsx'

csvpathI = '2019_27101220_Export.csv'
csvpathII = '2019_27101220_Import.csv'
csvpathIII = '2020_27101220_Export.csv'
csvpathIV = '2020_27101220_Import.csv'

csvpath_list = [csvpathI, csvpathII, csvpathIII, csvpathIV]

for csvpath in csvpath_list:
    df = pd.read_csv(csvpath)


    conversion_unit = 1000
    supplymentry_conversion_unit = 1000

    df['quantity_converted'] = np.multiply(df['Quantity'],conversion_unit)
    df['supplimentry_quantity_converted'] = np.multiply(df['Supplimentary Quantity'],conversion_unit)

    csvnames = os.path.basename(csvpath).split(".")[0]


    with pd.ExcelWriter(pathDestination) as writer:
        df.to_excel(writer, sheet_name = csvnames, index = False)`

You need to put the loop inside the context manager in order to save each ( df ) to a separate sheet.

Try this:

conversion_unit = 1000
supplymentry_conversion_unit = 1000

with pd.ExcelWriter(pathDestination) as writer:
    for csvpath in csvpath_list:
        df = pd.read_csv(csvpath)
        df['quantity_converted'] = df['Quantity'].mul(conversion_unit)
        df['supplimentry_quantity_converted'] = df['Supplimentary Quantity'].mul(supplymentry_conversion_unit)
        df.to_excel(writer, sheet_name = csvpath.split(".")[0], index = False)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM