如何将我的输出 xls 文件发送到 python 中的特定路径?

How do I send my output xls files to a specific path in python?

如何让我的 df.to_excel 函数写入输出路径?在我的脚本运行后,我没有看到我定义的 output_path 目录中的文件。

import pandas as pd
from openpyxl import load_workbook
import os
import datetime

output_path = 'C:/Users/g/Desktop/autotranscribe/python/Processed'

path = 'C:/Users/g/Desktop/autotranscribe/python/Matching'

cols_to_drop =  ['PSI ID','PSIvet Region','PSIvet region num','Fax','County']               
 
column_name_update_map = {'Account name': 'Company Name','Billing address':'Address','Billing city':'City','Billing State':'State'} 

for file in os.listdir("C:/Users/g/Desktop/autotranscribe/python/Matching"):
    if file.startswith("PSI") and "(updated headers)" not in file:
        dfs = pd.read_excel(file, sheet_name=None,skiprows=5)
        output = dict()
        for ws, df in dfs.items():
            if ws.startswith("Cancelled Members"): df = df.drop('Active date', axis=1)
            if any(ws.startswith(x) for x in ["New Members","PVCC"]):
                continue
            #if ws in ["New Members 03.22","PVCC"]:   #sheetstoavoid
            temp = df
            dt = pd.to_datetime(os.path.getctime(os.path.join(path,file)),unit="s").replace(nanosecond=0)
            output[ws] = temp
        writer = pd.ExcelWriter(f'{file.replace(".xlsx","")} (updated headers).xlsx')
        for ws, df in output.items():
            df.to_excel(writer, index=None, sheet_name=ws)
        writer.save()
        writer.close()

我试过了df.to_excel(writer,output_path, index=None, sheet_name=ws)

但是我得到一个错误 文件“”,第 36 行,位于 df.to_excel(writer,output_path, index=None, sheet_name=ws)

TypeError: to_excel() 得到了参数 'sheet_name' 的多个值。

几点评论:

  • 函数 os.listdir() 仅 returns “不合格”文件名,因此在使用 file 之前,我们需要使用 input_file_name = f'{path}/{file}' 之类的前缀 path .
  • 同样,pd.ExcelWriter()需要一个合格的文件名(即,包括路径以及“不合格”的文件名),我们可以通过这样做得到:output_file_name = f'{output_path}/{file.replace(".xlsx","")} (updated headers).xlsx'
  • 您问题中的代码中有一些元素可能没有被使用,但我没有评论或更改这些元素,而是在下面提供了一个经过最小更改的工作版本。

我创建了名为 MatchingProcessed 的目录。我在 Matching 中放置了一个名为 PSI 123.xlsx 的文件,其中包含一个名为 Cancelled Members 的选项卡,其中包含以下内容:

will skip           
will skip           
will skip           
will skip           
will skip           
Col1        Col2    Col3    Active date
xx          NY      110     789

然后我 运行 对您的代码进行了以下修改(请注意对 output_pathpath 的更改,以便在我的环境中进行测试):

import pandas as pd
from openpyxl import load_workbook
import os
import datetime

#output_path = 'C:/Users/g/Desktop/autotranscribe/python/Processed'

#path = 'C:/Users/g/Desktop/autotranscribe/python/Matching'

output_path = './Processed'
path = './Matching'

cols_to_drop =  ['PSI ID','PSIvet Region','PSIvet region num','Fax','County']               
 
column_name_update_map = {'Account name': 'Company Name','Billing address':'Address','Billing city':'City','Billing State':'State'} 

for file in os.listdir(path):
    if file.startswith("PSI") and "(updated headers)" not in file:
        input_file_name = f'{path}/{file}'
        dfs = pd.read_excel(input_file_name, sheet_name=None,skiprows=5)
        output = dict()
        for ws, df in dfs.items():
            if ws.startswith("Cancelled Members") and 'Active date' in df.columns: df = df.drop('Active date', axis=1)
            if any(ws.startswith(x) for x in ["New Members","PVCC"]):
                continue
            #if ws in ["New Members 03.22","PVCC"]:   #sheetstoavoid
            temp = df
            dt = pd.to_datetime(os.path.getctime(os.path.join(path,file)),unit="s").replace(nanosecond=0)
            output[ws] = temp
        output_file_name = f'{output_path}/{file.replace(".xlsx","")} (updated headers).xlsx'
        writer = pd.ExcelWriter(output_file_name)
        for ws, df in output.items():
            df.to_excel(writer, index=None, sheet_name=ws)
        writer.save()
        writer.close()

在 运行 之后,代码在 Processed 中创建了一个名为 PSI 123 (updated headers).xlsx 的新文件,其中 sheets 在输入中命名。 sheet Cancelled Members 包含以下内容:

Address State   Zip Status  Status.1    Date    Partner
Col1    Col2    Col3
xx      NY      110