吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6731|回复: 84
上一主题 下一主题
收起左侧

[Windows] 合并doc、docx、txt文件的小工具

  [复制链接]
跳转到指定楼层
楼主
shenlixin 发表于 2024-4-9 19:14 回帖奖励
自己用python做了一个合并文档的小工具,有大量的文档,文字又不多,一个个的看起来太麻烦,就做了这么一个小工具。它可以合并doc、docx、txt格式的文档,混在一起也没有关系,txt文件可以识别'utf-8', 'ansi', 'gbk'编码的文档。



把文档所在的路径复制到此,回车,选择合并文档的位置,有两个选项,一个是桌面,一个是文档所在的文件夹。默认的是桌面,直接回车就会输出到桌面,文件名以原文档所在文件夹的名字命名。


我这个演示的文件夹三种格式的都有。

合并后的文件首先是目录,每一篇前面加了序号,名字就是原文档的文件名加上书名号。
下面是代码:
[Python] 纯文本查看 复制代码
import os
from docx import Document
import time

def extract_text_from_docx(docx_path):
    """从docx文件中提取文本"""
    doc = Document(docx_path)
    text = []
    for p in doc.paragraphs:
        paragraph_text = p.text.strip()
        if paragraph_text:
            text.append(paragraph_text)
        text.append('\n')
    return ''.join(text).replace('\n\n\n', '\n').replace('\n\n', '\n')

def extract_text_from_doc(doc_path):
    """从doc文件中提取文本"""
    import win32com.client
    word = win32com.client.Dispatch("Word.Application")
    word.visible = False
    try:
        doc = word.Documents.Open(doc_path)
        text = doc.Range().Text
        doc.Close()
        return text.strip()
    except Exception as e:
        print(f"Error reading {doc_path}: {e}")
        return ''
    finally:
        word.Quit()

def extract_text_from_txt(txt_path):
    """从txt文件中提取文本"""
    encodings_to_try = ['utf-8', 'ansi', 'gbk']
    text = None
    for encoding in encodings_to_try:
        try:
            with open(txt_path, 'r', encoding=encoding) as file:
                text = file.read()
            break
        except UnicodeDecodeError:
            continue
    return text

def get_folder_path():
    """获取用户选择的文件夹路径"""
    folder_path = input("请选择要读取的文件的目录:")
    return folder_path

def get_output_option():
    """获取用户选择的输出位置"""
    output_option = input("请选择输出位置,默认选择是1:\n1. 桌面\n2. 要读取的文件相同的目录\n") or '1'
    return output_option

def main():
    # 让用户选择输入目录
    print("\033[93m选择输入目录...\033[0m")
    folder_path = get_folder_path()
    if not folder_path:
        print("未选择输入目录,程序退出。")
        return

    # 获取输入文件夹的名称
    folder_name = os.path.basename(os.path.normpath(folder_path))

    # 让用户选择输出位置
    print("\033[93m请选择输出位置...\033[0m")
    output_option = get_output_option()
    if output_option == '1':
        desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
        output_file = os.path.join(desktop, folder_name + '.txt')
    elif output_option == '2':
        output_file = os.path.join(folder_path, folder_name + '.txt')
    else:
        print("无效的选项。程序退出。")
        return

    # 调试信息:输出文件路径
    print(f"输出文件路径: {output_file}")

    directory = []
    content_blocks = []

    total_files = len([file for file in os.listdir(folder_path) if file.endswith(('.docx', '.doc', '.txt'))])
    processed_files = 0

    print("处理进度:")
    for file in os.listdir(folder_path):
        if file.endswith('.docx'):
            title = '第{:03d}篇 《{}》'.format(processed_files + 1, os.path.splitext(file)[0])
            path_to_file = os.path.join(folder_path, file)
            content = extract_text_from_docx(path_to_file)
            content_blocks.append((title, content))
            directory.append(title)
            processed_files += 1
            print(f"\r\033[92m{processed_files}/{total_files} 文件已处理\033[0m", end='', flush=True)

        elif file.endswith('.doc'):
            title = '第{:03d}篇 《{}》'.format(processed_files + 1, os.path.splitext(file)[0])
            path_to_file = os.path.join(folder_path, file)
            content = extract_text_from_doc(path_to_file)
            content_blocks.append((title, content))
            directory.append(title)
            processed_files += 1
            print(f"\r\033[92m{processed_files}/{total_files} 文件已处理\033[0m", end='', flush=True)

        elif file.endswith('.txt'):
            title = '第{:03d}篇 《{}》'.format(processed_files + 1, os.path.splitext(file)[0])
            path_to_file = os.path.join(folder_path, file)
            content = extract_text_from_txt(path_to_file)
            content_blocks.append((title, content))
            directory.append(title)
            processed_files += 1
            print(f"\r\033[92m{processed_files}/{total_files} 文件已处理\033[0m", end='', flush=True)

    print("\n")

    with open(output_file, 'w', encoding='utf-8') as file_out:
        for title in directory:
            file_out.write(title + '\n')
        file_out.write('-' * 50 + '\n')  # 分隔线

        for title, content in content_blocks:
            file_out.write(title + '\n\n' + content.strip() + '\n')
            file_out.write('-' * 50 + '\n')  # 分隔线

    print(f"\033[93m文件已合并到 {output_file}\033[0m")
    print(f"\033[93m你的文件保存在 {os.path.dirname(output_file)} 目录下!\033[0m")
    time.sleep(1.5)

    input("按 Enter 键退出程序...")  # 等待

if __name__ == "__main__":
    main()


这里有打包的exe文件:
蓝奏云链接:https://wwl.lanzouq.com/iBm9T1ugnzmd
写着玩儿的,觉得有用就拿走。

免费评分

参与人数 16吾爱币 +14 热心值 +16 收起 理由
snmyj + 1 + 1 谢谢@Thanks!
guoruihotel + 1 + 1 谢谢@Thanks!
huangliang0828 + 1 + 1 谢谢@Thanks!
nojon + 1 + 1 谢谢@Thanks!实用工具
187573 + 1 + 1 谢谢@Thanks!
无olo名peng + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
痴情feel + 1 + 1 谢谢@Thanks!
IPS1205 + 1 + 1 谢谢@Thanks!
461735945 + 1 + 1 用心讨论,共获提升!
15911974915 + 1 谢谢@Thanks!
nndyky + 1 + 1 鼓励转贴优秀软件安全工具和文档!
eden88888 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
deepgame + 1 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
viconly + 1 + 1 谢谢@Thanks!
tx444219233 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
zerofire 发表于 2024-4-10 13:00
可以写个合并ppt的文件吗?有的网站下的ppt是一页一页下的,合并起来蛮久的。
推荐
 楼主| shenlixin 发表于 2024-4-10 16:20 |楼主
zerofire 发表于 2024-4-10 13:00
可以写个合并ppt的文件吗?有的网站下的ppt是一页一页下的,合并起来蛮久的。

合并.pptx文件用Python相当复杂,因为PowerPoint演示文稿可以包含各种复杂的元素,如文本、图片、图表、媒体和动画。当您尝试通过编码合并它们时,需要确保所有这些元素的格式和属性都被保留。
除了编程之外,有一些另外的方法可以更简便地合并PowerPoint演示文稿:
1、使用PowerPoint软件:
打开您想要作为主文档的演示文稿。
前往“插入” -> “幻灯片” -> “重新用幻灯片”。
浏览到另一个想合并的演示文稿文件,选择要插入的幻灯片。
重复上述步骤直到所有的演示文稿都被合并为一个文件。
2、使用在线工具:网络上有很多在线服务允许您上传多个.pptx文件,然后将它们合并为一个文件。只需在搜索引擎中搜索“合并PPT”或“合并PowerPoint文件”等关键词,您将找到多种在线工具。
3#
cux666 发表于 2024-4-10 12:45
4#
addseason 发表于 2024-4-10 13:01
感谢楼主分享~收藏备用
5#
andyfky 发表于 2024-4-10 13:05
不错,小巧有用的。
6#
lr957 发表于 2024-4-10 13:27
不错的小软件,感谢了!
7#
gb77522677 发表于 2024-4-10 13:31
这个不错,感谢
8#
shangshanlu 发表于 2024-4-10 13:49

很好的小软件,感谢了!
9#
w668 发表于 2024-4-10 13:51
楼主辛苦了
10#
stonewoods 发表于 2024-4-10 13:52
好像有点问题,第二步就闪退了,是不是我的电脑上缺什么依赖?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 18:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表