在 python 中将 msg 转换为 pdf
Converting msg to pdf in python
我真的需要你的帮助来解决一个问题!显然,我的知识不足以找到解决方案。
所以,我有一些已经创建并保存的 msg 文件。现在我需要编写一个函数来帮助我从 msg 文件(会有很多)创建 pdf。
非常感谢您的帮助!
Post 找到对我有用的解决方案(如 Amey P Naik 所问)。如前所述,我尝试了多个模块,但只有 extract_msg 适用于手头的案例。我创建了两个函数,用于将 outlook 消息文本和附件作为 Pandas DataFrame 导入,第一个函数将为每个电子邮件消息创建一个文件夹,第二个函数将数据从消息导入到 dataframe。附件需要在父目录的子目录上使用 for 循环单独处理。下面是我用注释创建的两个函数:
# 1). Import the required modules and setup working directory
import extract_msg
import os
import pandas as pd
direct = os.getcwd() # directory object to be passed to the function for accessing emails, this is where you will store all .msg files
ext = '.msg' #type of files in the folder to be read
# 2). Create separate folder by email name and extract data
def content_extraction(directory,extension):
for mail in os.listdir(directory):
try:
if mail.endswith(extension):
msg = extract_msg.Message(mail) #This will create a local 'msg' object for each email in direcory
msg.save() #This will create a separate folder for each email inside the parent folder and save a text file with email body content, also it will download all attachments inside this folder.
except(UnicodeEncodeError,AttributeError,TypeError) as e:
pass # Using this as some emails are not processed due to different formats like, emails sent by mobile.
content_extraction(direct,ext)
#3).Import the data to Python DataFrame using the extract_msg module
#note this will not import data from the sub-folders inside the parent directory
#rather it will extract the information from .msg files, you can use a loop instead
#to directly import data from the files saved on sub-folders.
def DataImporter(directory, extension):
my_list = []
for i in os.listdir(direct):
try:
if i.endswith(ext):
msg = extract_msg.Message(i)
my_list.append([msg.filename,msg.sender,msg.to, msg.date, msg.subject, msg.body, msg.message_id]) #These are in-built features of '**extract_msg.Message**' class
global df
df = pd.DataFrame(my_list, columns = ['File Name','From','To','Date','Subject','MailBody Text','Message ID'])
print(df.shape[0],' rows imported')
except(UnicodeEncodeError,AttributeError,TypeError) as e:
pass
DataImporter(direct,ext)
Post 运行 这2个函数,你将在一个Pandas DataFrame中拥有几乎所有的信息,你可以根据需要使用它。如果您还需要从附件中提取内容,则需要为父目录中的所有子目录创建一个循环,以根据附件的格式读取附件文件,就像我的情况一样,格式是 .pdf、.jpg、.png ,.csv 等。从这些格式获取数据将需要不同的技术,例如从 pdf 获取数据,您将需要 Pytesseract OCR 模块。
如果您找到更简单的从附件中提取内容的方法,请post将您的解决方案放在这里以供将来参考,如果您有任何问题,请发表评论。另外如果上面的代码有什么可以改进的地方,欢迎指出。
我真的需要你的帮助来解决一个问题!显然,我的知识不足以找到解决方案。 所以,我有一些已经创建并保存的 msg 文件。现在我需要编写一个函数来帮助我从 msg 文件(会有很多)创建 pdf。 非常感谢您的帮助!
Post 找到对我有用的解决方案(如 Amey P Naik 所问)。如前所述,我尝试了多个模块,但只有 extract_msg 适用于手头的案例。我创建了两个函数,用于将 outlook 消息文本和附件作为 Pandas DataFrame 导入,第一个函数将为每个电子邮件消息创建一个文件夹,第二个函数将数据从消息导入到 dataframe。附件需要在父目录的子目录上使用 for 循环单独处理。下面是我用注释创建的两个函数:
# 1). Import the required modules and setup working directory
import extract_msg
import os
import pandas as pd
direct = os.getcwd() # directory object to be passed to the function for accessing emails, this is where you will store all .msg files
ext = '.msg' #type of files in the folder to be read
# 2). Create separate folder by email name and extract data
def content_extraction(directory,extension):
for mail in os.listdir(directory):
try:
if mail.endswith(extension):
msg = extract_msg.Message(mail) #This will create a local 'msg' object for each email in direcory
msg.save() #This will create a separate folder for each email inside the parent folder and save a text file with email body content, also it will download all attachments inside this folder.
except(UnicodeEncodeError,AttributeError,TypeError) as e:
pass # Using this as some emails are not processed due to different formats like, emails sent by mobile.
content_extraction(direct,ext)
#3).Import the data to Python DataFrame using the extract_msg module
#note this will not import data from the sub-folders inside the parent directory
#rather it will extract the information from .msg files, you can use a loop instead
#to directly import data from the files saved on sub-folders.
def DataImporter(directory, extension):
my_list = []
for i in os.listdir(direct):
try:
if i.endswith(ext):
msg = extract_msg.Message(i)
my_list.append([msg.filename,msg.sender,msg.to, msg.date, msg.subject, msg.body, msg.message_id]) #These are in-built features of '**extract_msg.Message**' class
global df
df = pd.DataFrame(my_list, columns = ['File Name','From','To','Date','Subject','MailBody Text','Message ID'])
print(df.shape[0],' rows imported')
except(UnicodeEncodeError,AttributeError,TypeError) as e:
pass
DataImporter(direct,ext)
Post 运行 这2个函数,你将在一个Pandas DataFrame中拥有几乎所有的信息,你可以根据需要使用它。如果您还需要从附件中提取内容,则需要为父目录中的所有子目录创建一个循环,以根据附件的格式读取附件文件,就像我的情况一样,格式是 .pdf、.jpg、.png ,.csv 等。从这些格式获取数据将需要不同的技术,例如从 pdf 获取数据,您将需要 Pytesseract OCR 模块。
如果您找到更简单的从附件中提取内容的方法,请post将您的解决方案放在这里以供将来参考,如果您有任何问题,请发表评论。另外如果上面的代码有什么可以改进的地方,欢迎指出。