鱼C论坛

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

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

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

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

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

x
以下是我打开一个Excel文件读取其中内容保存为另一个Excel文件,我希望新文件与原文件保存在同一路径,但实际只能保存在当前Python代码运行路径下。
请大神指教:

  1.         def on_convert_clicked(self):
  2.                 self.ui.message.clear()
  3.                 if salaryfile != None and len(salaryfile) > 0 :
  4.                         wb = openpyxl.load_workbook(salaryfile, data_only=True)
  5.                         ws = wb.active

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

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

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

  1. import os

  2. ...

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

  5. self.ui.message.append('已生成工资条文件:' + new_filename)
复制代码


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

注意,\是Windows下的路径分隔符,在其他操作系统中可能不适用。如果需要跨平台兼容,可以考虑使用os.path.join()函数来连接路径,它会根据操作系统自动选择适当的路径分隔符。例如:

  1. 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() 方法来连接路径和文件名。所以您可以修改代码如下:

  1. import os

  2. # ...

  3. wb.save(os.path.join(os.path.dirname(salaryfile), os.path.basename(salaryfile).split('.')[0] + '_To工资条.xlsx'))
  4. 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()函数来分别获取原文件的目录和文件名。

以下是修改后的代码示例:
  1. import os
  2. import openpyxl
  3. def on_convert_clicked(self):
  4.     self.ui.message.clear()
  5.    
  6.     if salaryfile is not None and len(salaryfile) > 0:
  7.         wb = openpyxl.load_workbook(salaryfile, data_only=True)
  8.         ws = wb.active
  9.         for rows in range(ws.max_row, 2, -1):
  10.             ws.insert_rows(rows, 2)
  11.             for cols in range(1, ws.max_column + 1):
  12.                 ws.cell(rows + 1, cols).value = ws.cell(1, cols).value
  13.         file_name = os.path.splitext(os.path.basename(salaryfile))[0]
  14.         new_file_path = os.path.join(os.path.dirname(salaryfile), file_name + '_To工资条.xlsx')
  15.         
  16.         wb.save(new_file_path)
  17.         self.ui.message.append('已生成工资条文件:' + new_file_path.replace('/', '\\'))
  18.     else:
  19.         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()方法保存文件时只使用了新文件名,因此默认保存在当前工作目录下。您可以修改如下:

  1. import os

  2. ...

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

  5. self.ui.message.append('已生成工资条文件:' + new_filename)
复制代码


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

注意,\是Windows下的路径分隔符,在其他操作系统中可能不适用。如果需要跨平台兼容,可以考虑使用os.path.join()函数来连接路径,它会根据操作系统自动选择适当的路径分隔符。例如:

  1. 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-6-3 04:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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