Python 3.4-win32com更改工作目录



我有一个简单的程序,它使用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,了解可能有用的技巧。

相关内容

  • 没有找到相关文章

最新更新