关于save保存文件时指定路径
以下是我打开一个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('.') + '_To工资条.xlsx') # 工资条文件名格式:原文件名前缀_To工资条.xlsx
self.ui.message.append('已生成工资条文件:' + os.path.dirname(salaryfile).replace('/','\\') + '\\' + os.path.basename(salaryfile).split('.') + '_To工资条.xlsx') # 实际保存路径为当前路径,非os.path.dirname(salaryfile).replace('/','\\')获取到的路径
else:
self.ui.message.append("<font color=\"#FF0000\">请先选择工资数据文件</font>") 在保存文件时,您可以使用 os.path 模块来指定文件的保存路径。在您的代码中, wb.save() 方法中使用了 os.path.basename(salaryfile) 来获取原文件的文件名,然后使用 .split('.') 来去除文件名的扩展名,最后再加上 '_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('.') + '_To工资条.xlsx'))
self.ui.message.append('已生成工资条文件:' + os.path.join(os.path.dirname(salaryfile), os.path.basename(salaryfile).split('.') + '_To工资条.xlsx'))
这样,新文件将会保存在与原文件相同的路径下。 关于保存文件时指定路径的解决方法
要将新文件保存在原文件的同一路径下,你需要使用原文件的路径作为基础,并根据需要添加新文件的名称。你可以使用os.path.dirname()和os.path.basename()函数来分别获取原文件的目录和文件名。
以下是修改后的代码示例:
import os
import openpyxl
def 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))
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()函数将原路径和新文件名结合起来获得新文件的完整路径。最后,我们将新文件保存在这个路径下。
希望以上解答能够帮助你解决问题。如果还有其他疑问,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
要指定保存路径为原文件所在的路径,可以使用os.path.dirname()函数获取原文件的目录路径,并将其与新文件名拼接起来作为保存路径。
在您的代码中,wb.save()方法保存文件时只使用了新文件名,因此默认保存在当前工作目录下。您可以修改如下:
import os
...
new_filename = os.path.dirname(salaryfile) + '\\' + os.path.basename(salaryfile).split('.') + '_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('.') + '_To工资条.xlsx')
这样可以确保在不同操作系统上都能正确处理路径。
如果问题已经解决,请设置最佳答案
页:
[1]