Python使用字符串变量(包括'\'

时间:2018-08-19 13:09:21

标签: python

我正在使用win32com从MyDocument文件夹中打开文件。看起来像这样:

filename = (shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)) + '\fubar_sheet.xlsx'

这很好用,但是我真正想做的是将“ fubar”设置为变量,以便我的函数可以根据情况打开不同的文件名。但是以下方法不起作用...

 filename = (shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)) + '\' + file_variable + '_sheet.xlsx'

...因为python无法识别我已经关闭了斜杠附近的引号。

我认为有解决办法,但我找不到!感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我建议使用os.path.join(...)

from win32com.shell import shell, shellcon
import os

file_variable = 'fubar'
file_template = '{}_sheet.xlsx'

filename = os.path.join(
    shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0),
    file_template.format(file_variable)
)

print(filename)

对我来说哪个打印:

C:\Users\Andersen\Documents\fubar_sheet.xlsx

join()的优点是您可以将路径的多个级别串在一起,因为它是使用*args语法实现的。表示您可以

path = os.path.join(base_path, 'which', 'is', 'very', 'deep', 'fubar_sheet.xlsx')

为您提供C:\Users\Andersen\Documents\which\is\very\deep\fubar_sheet.xlsx',并且它与操作系统无关,这意味着斜线在Mac / UNIX上的行为将有所不同,例如/home/andersen/which/is/very/deep/fubar_sheet.xlsx

答案 1 :(得分:1)

您应该使用另一个\来逃避\

filename = (shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)) + '\\' + file_variable + '_sheet.xlsx'

或者您可以将其设为原始字符串文字,以避免不得不转义\

filename = (shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)) + r'\' + file_variable + '_sheet.xlsx'