如何在pd.ExcelWriter中正确关闭xlsx文件?

问题描述 投票:0回答:1

我正在尝试将表写入一个 xlsx 文件。

# file path 'E:/file.xlsx'
file = Path(file_path)
# delete file if it exists
if file.is_file():
    file.unlink()
    print("File deleted")

# dfs ontains in dictionary
for key in dfs.keys():
    # if file exists make ExcelWriter with mode 'append'
    if file.is_file():
        with pd.ExcelWriter(file_path, mode = 'a', if_sheet_exists='replace') as writer:
            new_df = transform_df(dfs[key][0], dfs[key][1])
            new_df.to_excel(writer, sheet_name=key, index=False)
            print(f"{key} - sheet appended")
    # if file not exists mode is 'write'
    else:
        with pd.ExcelWriter(file_path, mode = 'w') as writer:
            new_df = transform_df(dfs[key][0], dfs[key][1])
            new_df.to_excel(writer, sheet_name=key, index=False)
            print("New file created")

 writer.close()

大多数时候我可以使用此代码在文件中写入 dfs,但有时我会遇到错误然后尝试删除文件,因为文件仍然打开。

writer._save() 或 writer.close() 导致 ValueError: 对已关闭文件进行 I/O 操作。

文件是否自动关闭?

Pandas 诉“2.2.1”,openpyxl 诉“3.1.2”

pandas openpyxl
1个回答
0
投票

说明

它会自动关闭,因为您正在使用上下文管理器

这是我添加的链接中的示例:

with open('some_file', 'w') as opened_file:
    opened_file.write('Hola!')

相当于:

file = open('some_file', 'w')
try:
    file.write('Hola!')
finally:
    file.close()

解决方案

因此请记住这一点,当

with
块完成时,您已经关闭了文件。

        with pd.ExcelWriter(file_path, mode = 'w') as writer:
            new_df = transform_df(dfs[key][0], dfs[key][1])
            new_df.to_excel(writer, sheet_name=key, index=False)
            print("New file created")

这样你就可以删除这一行

 writer.close()

应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.