我有一个简单的程序,它使用win32com.client的Dispatch连接到outlook电子邮件框,浏览电子邮件并在本地保存附件。
如果我想保存一个附件,我会处理它的路径和文件名,这样我就可以用方法附件在本地保存它。另存为文件(文件)。在某些情况下,路径+文件名超过了255个字符(加在一起)的限制,因此此操作失败。
我想知道如何更改该方法的工作目录。如果我试图将路径和文件名分开,请使用os.chdir()将我的工作目录更改为提取的路径,并使用SaveAsFile()只使用文件名,它会将其保存在临时文件夹中(这意味着os.chdir()不会影响该方法)
临时文件夹(如果有任何帮助):C: \Users[USERNAME]\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\GKSDWWYZ
那么,如何更改SaveAsFile()方法的默认工作目录?
这就是我正在做的:
def save_attachment_as_file(att, file):
"""
att - an email attachment
file - to full path and filename to save the attachment as
"""
# seperate the path and filename
file_path = file[:file.rfind("\")]
file_name = file[file.rfind("\")+1:]
# check that both seperate lengths does not exceed the limit
if not check_length(file_path) or not check_length(file_name):
return
# save the currect working directory
working_path = getcwd()
# change the working directory to the provided path
chdir(file_path)
# save the attachment
att.SaveAsFile(file_name)
# change back the working directory
chdir(working_path)
print("Created:", file)
我认为真正的问题是,当路径超过255个字符时,如何让Outlook保存附件。基于微软办公网站上的信息(如https://support.microsoft.com/en-us/kb/131464,这是针对Excel的,但本质与您的问题相同,因此"尝试的事情"适用于此处),您最好的选择是让Outlook保存到临时文件夹,然后使用Python shutil.copyfile()复制文件(因为此函数尊重当前工作目录)。
您也可以尝试8.3格式,如所述。在使用Python的Windows上找不到长名称的文件。
还可以看看在Python和Python中将路径过长的文件复制到另一个目录:复制长文件路径Shutil.copyfile,了解可能有用的技巧。