网站LOGO
静若安然
页面加载中
12月5日
网站LOGO 静若安然
记录个人学习生活和成长历程
菜单
  • 热评
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    Python 遍历目录读取word文本日期
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。

    Python 遍历目录读取word文本日期

    Akria · 原创 ·
    程序设计 · Python
    共 3295 字 · 约 1 分钟 · 1571
    本文最后更新于2024年03月20日,已经过了259天没有更新,若内容或图片失效,请留言反馈
    • 基于工作需求,现需要统计几千份word文件中日期进行存档
    • 可利用Python脚本模块遍历目录下所有word文件,查找其中日期,以文件名-日期格式导出到txt文本中
    • 先明确相关需求
    1. 需读取doc/docx格式,利用python-docx和win32com.client库分别处理docx和doc格式文件
    2. 文档中日期格式为xx年xx月xx日,利用正则表达式进行匹配日期
    3. 输出为txt文本
    python 代码:
    import os
    import re
    import win32com.client
    from docx import Document
    
    def find_dates(text):
        pattern = r'\b\d{1,4}年\d{1,2}月\d{1,2}日\b'
        return re.findall(pattern, text)
    
    def process_word_files(directory):
        results = []
        for filename in os.listdir(directory):
            if filename.endswith('.docx'):
                doc = Document(os.path.join(directory, filename))
                text = ' '.join(paragraph.text for paragraph in doc.paragraphs)
                dates = find_dates(text)
                for date in dates:
                    results.append(f'{filename}-{date}')
            elif filename.endswith('.doc'):
                word = win32com.client.DispatchEx('Word.Application')
                word.Visible = False 
                doc = word.Documents.Open(os.path.join(directory, filename))
                text = doc.Content.Text
                dates = find_dates(text)
                for date in dates:
                    results.append(f'{filename}-{date}')
                doc.Close(False)
                word.Quit()
        return results
    
    def save_to_txt(results, output_filename):
        with open(output_filename, 'w') as f:
            for line in results:
                f.write(line + '\n')
    directory = r'C:\\Users\\user\\Desktop\\1\\2023' 
    output_filename = 'output.txt'  
    results = process_word_files(directory)
    save_to_txt(results, output_filename)
    • 为了更方便,我们可以使用pandas库将结果保存在Excel中
    • 如果文件较多,由于读取doc旧版格式会打开word后台,以上代码实际运行后,会出现内存占满问题
    • 以下代码进行了改进,在处理完每个文件后关闭后台
    python 代码:
    import os
    import re
    import win32com.client
    import pandas as pd
    from docx import Document
    
    def find_dates(text):
        pattern = r'\b\d{1,4}年\d{1,2}月\d{1,2}日\b'
        return re.findall(pattern, text)
    
    def process_word_files(directory):
        results = []
        for filename in os.listdir(directory):
            if filename.endswith('.docx'):
                doc = Document(os.path.join(directory, filename))
                text = ' '.join(paragraph.text for paragraph in doc.paragraphs)
                dates = find_dates(text)
                for date in dates:
                    results.append({'filename': filename, 'date': date})
            elif filename.endswith('.doc'):
                word = win32com.client.DispatchEx('Word.Application')
                word.Visible = False
                doc = word.Documents.Open(os.path.join(directory, filename))
                text = doc.Content.Text
                dates = find_dates(text)
                for date in dates:
                    results.append({'filename': filename, 'date': date})
                doc.Close(False)
                word.Quit() 
        return results
    
    def save_to_excel(results, output_filename):
        df = pd.DataFrame(results)
        df.to_excel(output_filename, index=False)
    
    directory = r'C:\\Users\\user\\Desktop\\word\\data'
    output_filename = 'output.xlsx'
    results = process_word_files(directory)
    save_to_excel(results, output_filename)
    • 请注意安装相关Python库
    python 代码:
    pip install python-docx win32com.client pandas openpyxl pyarrow
    声明:本文由 Akria(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    现在已有

    1

    条评论
    我要发表评论
    1. 头像
      ubqcxowrzl
      头像 ubqcxowrzl
      • 等级:Lv.1
      • 角色:访客
      • 在线:本月

      你的文章内容非常专业,让人佩服。

      · · · 海外
    博客logo 静若安然 记录个人学习生活和成长历程 51统计 百度统计
    ICP 蜀ICP备2023037012号-1

    💻️ Akria 昨天 23:15 在线

    🕛

    本站已运行 7 年 101 天 12 小时 5 分
    静若安然. © 2017 ~ 2024.
    网站logo

    静若安然 记录个人学习生活和成长历程