2014-08-29 79 views
0

我寫的MHT腳本解析MHT文件,並從母公司中提取部分信息,並將其寫入到一個單獨的MHT文件提取不同的內容類型MHT文件分成多個MHT文件

我寫了下面的這在file_location和搜索特定的content_id打開MHT文件,並將其寫入到一個新的MHT文件

def extract_content(self, file_location, content_id,extension): 
    first_part = file_location.split(extension)[0] 
    #checking if file exists 
    new_file = first_part + "-" + content_id.split('.')[0] + extension 

    while os.path.exists(new_file): 
     os.remove(new_file) 

    with open(file_location, 'rb') as mime_file, open(new_file, 'w') as output: 
     ***#Extracting the message from the mht file*** 
     message = message_from_file(mime_file) 
     t = mimetypes.guess_type(file_location)[0] 

     #Walking through the message 
     for i, part in enumerate(message.walk()): 

      #Check the content_id if the one we are looking for 
      if part['Content-ID'] == '<' + content_id + '>': 
       ***witing the contents*** 
       output.write(part.as_string(unixfrom=False)) 

顯然我不能夠在IE中應用/ PDF和應用的情況下,打開輸出部分功能/ octet-stream

我怎麼寫這些內容類型如應用/ PDF和 應用程序/八位字節流中的MHT文件,以便我能夠查看IE圖片或PDF?

感謝

+0

你說你不能打開它。什麼是錯誤信息? – 2014-08-29 06:37:17

+0

@ m170897017感謝您的評論。它不顯示任何錯誤,但顯示一個空白頁 – karthikbharadwaj 2014-08-29 07:01:57

回答

1

試試這個:

... 
if m['Content-type'].startswith('text/'): 
        m["Content-Transfer-Encoding"] = "quoted-printable" 

       else: 
        m["Content-Transfer-Encoding"] = "base64" 

       m.set_payload(part.get_payload())       
       ****Writing to output**** 
       info = part.as_string(unixfrom=False) 
       info = info.replace('application/octet-stream', 'text/plain') 
       output.write(info) 
... 

告訴我,如果它的工作原理。

+0

感謝您的答案。我可以打印文件以及在文本編輯器中打開文件。但是我希望IE能夠將它識別爲正確的.mht文件,而不是這樣做。我想這是一些格式問題,但我無法準確指出。 – karthikbharadwaj 2014-08-29 07:11:23

+0

@karthikbharadwaj我認爲改變標題可能會有所幫助。我已經更新了我的答案。試一試,告訴我。 – 2014-08-29 07:22:03

+0

非常感謝。工作正常。我認爲我在內容類型應用程序/八位字節流,基本上是JPG和pdf附件的應用程序/ pdf中遇到了問題。有沒有辦法對它們進行適當的編碼,以便它們出現在新的mht文件中?我也在環顧四周玩代碼。如果你有這方面的知識,這將是有益的。謝謝。 – karthikbharadwaj 2014-08-29 08:28:47