找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手

python通过docx模块提取简历里面的邮件地址放统一存放

[复制链接]
本帖最后由 icestick8586 于 2018-9-17 21:01 编辑
  1. import os,shutil,docx,re,time
  2. from win32com import client as wc
  3. #从所有级联目录读取文件到指定目录内
  4. def count_files(file_dir):
  5.     count=0
  6.     for p,d,f in os.walk(file_dir):
  7.         for c in f:
  8.             if c.split('.')[-1]=="doc":
  9.                 count +=1
  10.                 src_dir = os.path.join(p, c)
  11.                 print(src_dir)
  12.                 dst_dir = file_dir + "back"
  13.                 if not os.path.exists(dst_dir):
  14.                     os.makedirs(dst_dir)
  15.                 shutil.copy(src_dir, dst_dir)
  16.     return count
  17. #提取每个docx简历文档里面的邮箱地址,我们这里使用python-docx模块来解决pip install python-docx
  18. def count_mail(file_dir,dst_file):
  19.     mail_list = []
  20.     for parent,dirctiory,files in os.walk(file_dir):
  21.         for f in files:
  22.             doc = docx.Document(os.path.join(parent,f))
  23.             pattern = re.compile(r'''([a-zA-Z0-9._%+-]+@[a-zA-Z0-9\t\s.-]+(\.[a-zA-Z0-9\t\s]{2,4}))''', re.VERBOSE)
  24.             for para in doc.paragraphs:
  25.                 for groups in pattern.findall(para.text):
  26.                     mail_list.append(groups[0].replace(" ","")+";")
  27.     with open(dst_file,'w')as f:
  28.         f.writelines(mail_list)
  29.     print("=====================邮件信息写入成功===================")
  30. #由于python-docx模块只能处理docx后缀,我们需要处理doc后缀的文件,必须通过win32com模块来把doc后缀转换成docx
  31. def docxTodoc(old_doc,new_doc):
  32.     word = wc.Dispatch('Word.Application')
  33.     for parent,directory,files in os.walk(old_doc):
  34.         for f in files:
  35.             doc = word.Documents.Open(os.path.join(parent,f))  # 目标路径下的文件
  36.             new_filepath=os.path.join(new_doc,f.split(".")[0]+".docx")
  37.             print(new_filepath)
  38.             doc.SaveAs(new_filepath, 12, False, "", True, "", False, False, False,False)  # 转化后路径下的文件
  39.             doc.Close()
  40.             print(time.time())
  41.     word.Quit()



  42. if __name__ == '__main__':
  43.     print(count_files(r"C:\Users\icestick\Desktop\51job_导出简历_20180917"))
  44.     count_mail(r"C:\Users\icestick\Desktop\new_doc",r"C:\Users\icestick\Desktop\test.txt" )
  45.     old_doc = r"C:\Users\icestick\Desktop\51job_导出简历_20180917"  #需要把doc目录转成docx格式的原目录
  46.     new_doc = r"C:\Users\icestick\Desktop\new_doc"                  #需要把doc目录转成docx格式的目标目录
  47.     mail_extract = r"C:\Users\icestick\Desktop\test.txt"            #邮箱提取好的文件
  48.     if not os.path.exists(new_doc):
  49.         os.mkdir(new_doc)
  50.         print("=====================目录创建成功======================")
  51.         docxTodoc(old_doc, new_doc)
  52.         print("=====================docx格式转换成功===================")
  53.         count_mail(new_doc, mail_extract)

  54.     else:
  55.         docxTodoc(old_doc, new_doc)
  56.         print("=====================docx格式转换成功===================")
  57.         count_mail(new_doc, mail_extract)
复制代码
分享至 : QQ空间
收藏

1 个回复

倒序浏览
  1. #通过docx的方式读取不到51job下载简历的情况下,可以使用如下方法:
  2. # from django.test import TestCase
  3. #coding:utf-8
  4. import os,shutil,docx,re,time
  5. from win32com import client as wc
  6. #从所有级联目录读取文件到指定目录内
  7. def count_files(file_dir):
  8.     count=0
  9.     for p,d,f in os.walk(file_dir):
  10.         for c in f:
  11.             if c.split('.')[-1]=="doc":
  12.                 count +=1
  13.                 src_dir = os.path.join(p, c)
  14.                 print(src_dir)
  15.                 dst_dir = file_dir + "back"
  16.                 if not os.path.exists(dst_dir):
  17.                     os.makedirs(dst_dir)
  18.                 shutil.copy(src_dir, dst_dir)
  19.     return count
  20. #提取每个docx简历文档里面的邮箱地址,我们这里使用python-docx模块来解决pip install python-docx
  21. def count_mail(file_dir,dst_file):
  22.     mail_list = []
  23.     for parent,dirctiory,files in os.walk(file_dir):
  24.         for f in files:
  25.             doc = docx.Document(os.path.join(parent,f))
  26.             pattern = re.compile(r'''([a-zA-Z0-9._%+-]+@[a-zA-Z0-9\t\s.-]+(\.[a-zA-Z0-9\t\s]{2,4}))''', re.VERBOSE)
  27.             for para in doc.paragraphs:
  28.                 for groups in pattern.findall(para.text):
  29.                     mail_list.append(groups[0].replace(" ","")+";")
  30.     with open(dst_file,'w')as f:
  31.         f.writelines(mail_list)
  32.     print("=====================邮件信息写入成功===================")
  33. #由于python-docx模块只能处理docx后缀,我们需要处理doc后缀的文件,必须通过win32com模块来把doc后缀转换成docx
  34. def docxTodoc(old_doc,new_doc):
  35.     word = wc.Dispatch('Word.Application')
  36.     for parent,directory,files in os.walk(old_doc):
  37.         for f in files:
  38.             doc = word.Documents.Open(os.path.join(parent,f))  # 目标路径下的文件
  39.             new_filepath=os.path.join(new_doc,f.split(".")[0]+".docx")
  40.             print(new_filepath)
  41.             doc.SaveAs(new_filepath, 12, False, "", True, "", False, False, False,False)  # 转化后路径下的文件
  42.             doc.Close()
  43.             print(time.time())
  44.     word.Quit()

  45. def count_mail_1(file_dir,dst_file):
  46.     import zipfile
  47.     import re
  48.     mail_list = []
  49.     for parent, dirctiory, files in os.walk(file_dir):
  50.         for f in files:
  51.             z = zipfile.ZipFile(os.path.join(parent,f), "r")
  52.             text = z.read("word/document.xml").decode("utf-8")
  53.             text = re.sub(r"<.*?>", "", text)  # 去除xml里的所有标记符
  54.             pattern = re.compile(r'''([a-zA-Z0-9._%+-]+@[a-zA-Z0-9\t\s.-]+(\.[a-zA-Z0-9\t\s]{2,4}))''', re.VERBOSE)
  55.             for groups in pattern.findall(text):
  56.                 mail_list.append(groups[0].replace(" ", "") + ";")
  57.     with open(dst_file, 'w', encoding="utf-8")as f:
  58.         f.writelines(mail_list)
  59.     print("=====================邮件信息写入成功===================")
  60. if __name__ == '__main__':
  61.     # print(count_files(r"C:\Users\icestick\Desktop\51job_导出简历_20180917"))
  62.     # count_mail(r"C:\Users\icestick\Desktop\new_doc",r"C:\Users\icestick\Desktop\test.txt" )
  63.     old_doc = r"C:\Users\icestick\Desktop\51job_导出简历_20180917"  #需要把doc目录转成docx格式的原目录
  64.     new_doc = r"C:\Users\icestick\Desktop\new_doc"                  #需要把doc目录转成docx格式的目标目录
  65.     mail_extract = r"C:\Users\icestick\Desktop\test.txt"            #邮箱提取好的文件
  66.     if not os.path.exists(new_doc):
  67.         os.mkdir(new_doc)
  68.         print("=====================目录创建成功======================")
  69.         docxTodoc(old_doc, new_doc)
  70.         print("=====================docx格式转换成功===================")
  71.         count_mail_1(new_doc, mail_extract)
  72.     else:
  73.         docxTodoc(old_doc, new_doc)
  74.         print("=====================docx格式转换成功===================")
  75.         count_mail_1(new_doc, mail_extract)



复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册