首页 > 其他分享 >doc to docx ;docx to doc

doc to docx ;docx to doc

时间:2023-09-03 15:22:29浏览次数:36  
标签:文件 docx word doc file path os



import zipfile
import os
import shutil
import hashlib
import send2trash

'''
假设所有的word文档存放在某路径中,这个路径中包含各种杂七杂八的玩意
使用Everything,或者"筛选文件.py"把所有的docx文件移动到C:\\Users\\asuka\\Desktop\\123
逐个解压每个docx文档,并提取图片

强烈建议使用Everything用来筛选出所有的word文档,这样假如有两个重名的文档,可以手动处理
如果编写软件来实现的话,会麻烦很多
'''


# 一个用来解压文件的函数
def extract_zip(zip_path):
    os.chdir(os.path.dirname(zip_path))  # 需要进入到这个路径下,这样解压的文件,才在这个路径下
    a = zipfile.ZipFile(zip_path)  # 调用zipfile.ZipFile()函数,创建一个ZipFile对象
    a.extractall()
    a.close()
    os.chdir(path)  # 恢复到之前的路径


# 用来获取所有的图片
'''
测试的时候发现,不同word文件解压之后,里面的图片命名格式一致,
导致不能直接移动图片,否则会造成文件覆盖,这里需要对找到的每一个文件,进行重命名
'''


def get_picture(demo_path):
    count = 1  # 用来个图片进行重命名
    for current_folder, list_folders, files in os.walk(demo_path):
        for f in files:
            if f.endswith('png') or f.endswith('jpg') or f.endswith('jpeg'):  # 设置图片类型是这种
                move_f = current_folder + '\\' + f  # 给出要移动的文件的路径
                new_file_path = path1 + '\\' + str(count) + '.' + f.rpartition('.')[-1]  # 指定新文件的文件路径,文件名数字递增,文件后缀
                shutil.move(move_f, new_file_path)  # 移动文件
                count += 1
    print('[-] 总共获取图片{}张'.format(count - 1))


# 对图片去重
# 计算每个图片的md5值,据此进行去重,去重的文件会被删除到回收站中
def only_one(test_path):
    md5_list = []
    count = 0
    for current_folder, list_folders, files in os.walk(test_path):
        for file in files:
            picture_path = current_folder + '\\' + file  # 获取每个图片的路径
            f = open(picture_path, 'rb')  # 开始计算每个图片的md5值
            md5obj = hashlib.md5()
            md5obj.update(f.read())
            get_hash = md5obj.hexdigest()
            f.close()
            md5_value = str(get_hash).upper()
            # 开始去重
            if md5_value in md5_list:
                send2trash.send2trash(picture_path)  # 如果这个文件的md5值曾经出现过,就删除这张图片
                count += 1
                print('[-] 删除重复图片:' + str(file))
            else:
                md5_list.append(md5_value)  # 如果这个图片的md5值不存在列表中,就添加进列表中
    print('[-] 共删除重复图片:{}张'.format(count))


print('[+] 只有后缀是docx的word文档才可以提取图片!!!')
path = input('[+] 请输入word文档所在文件夹:')  # 获取原始的word文档所在路径
os.chdir(path)

print("[+] 请输入一个路径,用来存放所有的图片")
print("[+] 或者按回车键,我将自动把图片整理之后存放在你的桌面")
path1 = input('')  # path1 用来存放所有的图片文件
if len(path1):
    pass
else:
    desktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')  # 获取桌面路径
    path1 = os.path.join(desktop_path, '所有word文件中的图片')
    os.makedirs(path1)

files = os.listdir(path)  # 获取指定文件夹下的所有文件
for file in files:  # 遍历指定文件夹下的所有文件
    if file.endswith('docx'):  # 加一个判断,这样即使path路径下有别的类型文件也无妨
        filename = file.rpartition('.')[0]  # 获取文件的文件名
        file_path = os.path.join(path, filename)
        os.makedirs(file_path)  # 为获取到的文件名创建一个文件夹
        shutil.move(file, file_path)  # 把word文档移动到同名文件夹中
        word_path = os.path.join(file_path, file)  # 获取此时word文件的文件路径
        extract_zip(word_path)  # 不用改后缀,直接解压docx文件

get_picture(path)
only_one(path1)
print('[-] 现有图片:{}张'.format(len(os.listdir(path1))))

 

from win32com import client


# 转换doc为docx
def doc2docx(fn):
    word = client.Dispatch("Word.Application")  # 打开word应用程序
    # for file in files:
    doc = word.Documents.Open(fn)  # 打开word文件
    doc.SaveAs("{}x".format(fn), 12)  # 另存为后缀为".docx"的文件,其中参数12或16指docx文件
    doc.Close()  # 关闭原来word文件
    word.Quit()


# 转换docx为doc
def docx2doc(fn):
    word = client.Dispatch("Word.Application")  # 打开word应用程序
    # for file in files:
    doc = word.Documents.Open(fn)  # 打开word文件
    doc.SaveAs("{}".format(fn[:-1]), 0)  # 另存为后缀为".docx"的文件,其中参数0指doc
    print(fn[:-1])
    doc.Close()  # 关闭原来word文件
    word.Quit()


doc2docx(r'C:\Users\asuka\Desktop\11\123.doc')
docx2doc(r'C:\Users\asuka\Desktop\11\456.docx')

 

标签:文件,docx,word,doc,file,path,os
From: https://www.cnblogs.com/QQ-77Ly/p/17675029.html

相关文章

  • Docker构建Jenkins
    拉取jenkins的docker镜像,这里用的是lts的长期支持版本,你可以到jenkins官网自由选择其他版本(下载速度慢,花了两个小时,如果中途出现超时再次运行该命令即可)dockerpulljenkins/jenkins:lts配置宿主机映射到容器的目录,之后jenkins的一些配置文件......
  • Linux--安装部署Docker
    Docker介绍Docker理解Docker是基于Go语言实现的开源容器项目,专业的叫法是应用容器一次封装、到处运行对应用封装、分发、部署、运行的生命周期进行管理应用组件:Web应用、数据库平台、操作系统、集群为应用的开发、运行和部署提供一站式的使用解决方案Docker优势Docker容器好比一......
  • sonarqube教程:docker-compose安装sonarqube及sonar-scanner插件的使用
    docker-compose安装sonarqubevim/etc/sysctl.conf vm.max_map_count=262144vm.max_map_count参数含义version:'3'services:postgres:image:postgres:14.5restart:alwayscontainer_name:postgresports:-5432:5432volumes:......
  • idea配置默认javadoc类、接口注释,自动生成文档
    idea配置类#if(${PACKAGE_NAME}&&${PACKAGE_NAME}!="")package${PACKAGE_NAME};#end#parse("FileHeader.java")/***总体描述*<p>创建时间:${DATE}${TIME}</p>*@authorzhaoXin*@sincev1.0*/publicclass${NAME}{}接......
  • docker下安装clickhouse
    文章目录01前言02安装03修改配置3.1安装vim插件3.2修改用户密码04验证01前言clickhousedockerhub首页:https://hub.docker.com/r/yandex/clickhouse-server,这里描述了clickhouse在docker下的简介以及部署方式:搜索自己需要的版本:https://hub.docker.com/r/yandex/clickhou......
  • 在Docker下一键安装部署免费开源的问答社区!
    在Docker下一键安装部署免费开源的问答社区! 1.准备一台VPS主机,没有的话,【搞一台】 2.一键安装部署Dockerwgethttps://raw.githubusercontent.com/QUANTAXIS/QUANTAXIS/master/config/install_docker.shsudobashinstall_docker.sh全选代码复制3.一键安装Answ......
  • docker 安装rabbitmq
    dockerpullrabbitmqdockerrun-d--hostnamemyrabbitmq--namerabbitmq-p15672:15672-p5672:5672rabbitmqdockerexec-itrabbitmq/bin/bashrabbitmq-pluginsenablerabbitmq_management可以通过访问http://localhost-ip:15672,访问web界面,这里的用户名和密......
  • ubuntu 虚拟机安装docker
    1. downloadimages:https://releases.ubuntu.com/22.04/       加速:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/2.installvmware3.vmware选择安装这个镜像。这个镜像安装完之后,没有docker4.用熟悉的编辑器打开: /etc/apt/sources.list ......
  • docker中两个容器使用同一个IP的方法
    如果你希望允许两个容器使用相同的IP地址,可以使用Macvlan网络驱动程序。Macvlan网络驱动程序允许容器共享主机网络接口的MAC地址,从而允许多个容器使用相同的IP地址。以下是使用Macvlan网络驱动程序实现两个容器共享相同IP地址的步骤:1.创建一个Macvlan网络,指定父接口和IP地址范......
  • docker 使用Nginx反向代理配置
    dockerexec-itnginxbash#进入nginx容器容器里面需要安装Vimapt-getupdate#这个命令的作用是:同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出的源的索引,这样才能获取到最新的软件包。apt-getinstall-yvim查看Nginx配置文件cdetc/nginx......