鱼C论坛

 找回密码
 立即注册
查看: 2193|回复: 3

[已解决]关于save保存文件时指定路径

[复制链接]
发表于 2023-8-22 16:31:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是我打开一个Excel文件读取其中内容保存为另一个Excel文件,我希望新文件与原文件保存在同一路径,但实际只能保存在当前Python代码运行路径下。
请大神指教:
        def on_convert_clicked(self):
                self.ui.message.clear()
                if salaryfile != None and len(salaryfile) > 0 :
                        wb = openpyxl.load_workbook(salaryfile, data_only=True)
                        ws = wb.active

                        for rows in range(ws.max_row, 2, -1):
                                ws.insert_rows(rows, 2)
                                for cols in range(1, ws.max_column + 1):
                                        ws.cell(rows + 1, cols).value = ws.cell(1, cols).value

                        wb.save(os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx')        # 工资条文件名格式:原文件名前缀_To工资条.xlsx
                        self.ui.message.append('已生成工资条文件:' + os.path.dirname(salaryfile).replace('/','\\') + '\\' + os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx')        # 实际保存路径为当前路径,非os.path.dirname(salaryfile).replace('/','\\')  获取到的路径
                else:
                        self.ui.message.append("<font color="#FF0000">请先选择工资数据文件</font>")
最佳答案
2023-8-22 16:31:51
要指定保存路径为原文件所在的路径,可以使用os.path.dirname()函数获取原文件的目录路径,并将其与新文件名拼接起来作为保存路径。

在您的代码中,wb.save()方法保存文件时只使用了新文件名,因此默认保存在当前工作目录下。您可以修改如下:
import os

...

new_filename = os.path.dirname(salaryfile) + '\\' + os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx'
wb.save(new_filename)

self.ui.message.append('已生成工资条文件:' + new_filename)

使用os.path.dirname(salaryfile)获取原文件的目录路径,并与新文件名拼接起来作为新的保存路径。然后,将新路径传递给wb.save()方法进行保存操作。

注意,\是Windows下的路径分隔符,在其他操作系统中可能不适用。如果需要跨平台兼容,可以考虑使用os.path.join()函数来连接路径,它会根据操作系统自动选择适当的路径分隔符。例如:
new_filename = os.path.join(os.path.dirname(salaryfile), os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx')

这样可以确保在不同操作系统上都能正确处理路径。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-22 16:31:28 | 显示全部楼层
在保存文件时,您可以使用 os.path 模块来指定文件的保存路径。在您的代码中, wb.save() 方法中使用了 os.path.basename(salaryfile) 来获取原文件的文件名,然后使用 .split('.')[0] 来去除文件名的扩展名,最后再加上 '_To工资条.xlsx' 作为新文件的文件名。

要指定路径,您可以使用 os.path.dirname(salaryfile) 来获取原文件的路径,并使用 os.path.join() 方法来连接路径和文件名。所以您可以修改代码如下:
import os

# ...

wb.save(os.path.join(os.path.dirname(salaryfile), os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx'))
self.ui.message.append('已生成工资条文件:' + os.path.join(os.path.dirname(salaryfile), os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx'))

这样,新文件将会保存在与原文件相同的路径下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-22 16:31:34 | 显示全部楼层
关于保存文件时指定路径的解决方法

要将新文件保存在原文件的同一路径下,你需要使用原文件的路径作为基础,并根据需要添加新文件的名称。你可以使用os.path.dirname()os.path.basename()函数来分别获取原文件的目录和文件名。

以下是修改后的代码示例:
import osimport openpyxldef on_convert_clicked(self):    self.ui.message.clear()        if salaryfile is not None and len(salaryfile) > 0:        wb = openpyxl.load_workbook(salaryfile, data_only=True)        ws = wb.active        for rows in range(ws.max_row, 2, -1):            ws.insert_rows(rows, 2)            for cols in range(1, ws.max_column + 1):                ws.cell(rows + 1, cols).value = ws.cell(1, cols).value        file_name = os.path.splitext(os.path.basename(salaryfile))[0]        new_file_path = os.path.join(os.path.dirname(salaryfile), file_name + '_To工资条.xlsx')                wb.save(new_file_path)        self.ui.message.append('已生成工资条文件:' + new_file_path.replace('/', '\\'))    else:        self.ui.message.append('<font color="#FF0000">请先选择工资数据文件</font>')
在上述代码中,我们使用os.path.splitext()函数获取原文件的文件名(不包括扩展名),然后使用os.path.join()函数将原路径和新文件名结合起来获得新文件的完整路径。最后,我们将新文件保存在这个路径下。

希望以上解答能够帮助你解决问题。如果还有其他疑问,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-22 16:31:51 | 显示全部楼层    本楼为最佳答案   
要指定保存路径为原文件所在的路径,可以使用os.path.dirname()函数获取原文件的目录路径,并将其与新文件名拼接起来作为保存路径。

在您的代码中,wb.save()方法保存文件时只使用了新文件名,因此默认保存在当前工作目录下。您可以修改如下:
import os

...

new_filename = os.path.dirname(salaryfile) + '\\' + os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx'
wb.save(new_filename)

self.ui.message.append('已生成工资条文件:' + new_filename)

使用os.path.dirname(salaryfile)获取原文件的目录路径,并与新文件名拼接起来作为新的保存路径。然后,将新路径传递给wb.save()方法进行保存操作。

注意,\是Windows下的路径分隔符,在其他操作系统中可能不适用。如果需要跨平台兼容,可以考虑使用os.path.join()函数来连接路径,它会根据操作系统自动选择适当的路径分隔符。例如:
new_filename = os.path.join(os.path.dirname(salaryfile), os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx')

这样可以确保在不同操作系统上都能正确处理路径。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表