我正在使用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无法识别我已经关闭了斜杠附近的引号。
我认为有解决办法,但我找不到!感谢您的帮助!
答案 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'