开始编写Python程序之Python小工具:word转pdf、压缩文件、解压文件、jpg转png

news2024/11/25 21:27:10

1、下载Python编译器

  • PyCharm官网下载地址
  • 对于个人编程,下载免费版的Community即可

在这里插入图片描述

2、创建一个Python项目

  • Python的最佳实现是为每个项目创建virtualenv。
  • 为此,请展开Project Interpreter:New Virtualenv Environment节点,然后选择用于创建新虚拟环境的工具。
  • 现在选择Virtualenv工具,并指定用于新虚拟环境的位置和基本解释器。

在这里插入图片描述

  • 创建一个python file,就可以开启编程之旅了

在这里插入图片描述

在这里插入图片描述

添加/更换解释器

  • 有时,我们要使用一些库的资源,但是程序无法运行,可能是python解释器版本太高,这时,我们需要降低解释器版本。具体操作如下:

python解释器下载官网

  • 选择需要的版本进行下载

在这里插入图片描述
注:有一些版本时不持支下载的,需要再找其他版本下载

  • 支持下载版本的页面
    在这里插入图片描述
  • 不支持下载版本的页面
    在这里插入图片描述
  • 下载完成之后,双击运行安装
    在这里插入图片描述
  • 选择自定义安装,勾选add to PATH

在这里插入图片描述
在这里插入图片描述

点击安装,等待安装完成即可

  • 在编译器右下角进行解释器添加
    在这里插入图片描述

在这里插入图片描述

  • 右下角替换为所选版本解释器,即添加完成

在这里插入图片描述

3、牛刀小试:python开发几个小工具

  • 注:要在python 3.8环境下使用

在这里插入图片描述

工具功能
Jpg2Png.py将同目录下的jpg转换为png
Word2Pdf.py将同目录下的word文档转换为pdf
Compress.py将指定目录下的文件压缩为zip/7z
Decompress.py将当前目录下的zip/7z/rar解压

3.1、jpg转png

#####################################
#####################################
# @author leon
# @date 2023-06-26
# @description 将同目录下的jpg转换为png
#####################################
#####################################
import glob
import msvcrt
import os
from PIL import Image

# 搜索当前文件夹中的jpg
jpg_files = glob.glob("*.jpg")
jpg_cnt = len(jpg_files)

# 开始转换
if jpg_cnt > 0:
    print(f"当前文件夹有{jpg_cnt}张jpg")
    for jpg_file in jpg_files:
        jpg_name = os.path.basename(jpg_file)
        png_name = jpg_name.replace("jpg", "png")
        print(f"{jpg_name}  ------>  {png_name}\n")
        print("转换中, 请等待......")
        image = Image.open(jpg_name)
        image.save(png_name)
        print("转换完毕\n\n按下任意键结束")
else:
    print("当前文件夹中没有jpg\n")
    print("按下任意键结束")

# 防止程序自行结束
msvcrt.getch()

3.2、Work2Pdf.py

########################################
########################################
# @author leon
# @date 2023-06-26
# @description 将同目录下的word文档转换为pdf
########################################
########################################
import glob
import msvcrt
import os
from docx2pdf import convert

# 搜索当前文件夹中的docx/doc
word_files = glob.glob("*.docx") + glob.glob("*.doc")
word_cnt = len(word_files)

# 开始转换
if word_cnt > 0:
    print(f"当前文件夹有{word_cnt}个word文档(docx/doc)")
    for word_file in word_files:
        word_name = os.path.basename(word_file)
        pdf_name = word_name.replace(".docx", ".pdf") if word_name.endswith(".docx") else word_name.replace(".doc", ".pdf")
        print(f"{word_name}  ------>  {pdf_name}\n")
        print("转换中, 请等待......")
        convert(word_name, pdf_name)
        print("转换完毕\n\n按下任意键结束")
else:
    print("当前文件夹中没有docx/doc文档\n")
    print("按下任意键结束")

# 防止程序自行结束
msvcrt.getch()

3.3、Compress.py

########################################
########################################
# @author leon
# @date 2023-06-26
# @description 将指定目录下的文件压缩为zip/7z
########################################
########################################
import msvcrt
import zipfile
import py7zr
import os

input_folder_path = input("输入文件路径进行压缩: ")
input_compress_format = input("输入压缩格式(zip/7z): ")


# 压缩为zip
def compress_zip(folder_path, compress_file_name):
    with zipfile.ZipFile(compress_file_name, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, _, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                print(f"compress --- {file_path}")
                zipf.write(file_path, os.path.relpath(file_path, folder_path))


# 压缩为7z
def compress_7z(folder_path, compress_file_name):
    with py7zr.SevenZipFile(compress_file_name, 'w') as seven_z_f:
        for root, _, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                print(f"compress --- {file_path}")
                seven_z_f.write(file_path, os.path.relpath(file_path, folder_path))


# 开始压缩
if len(input_folder_path) > 0:
    if len(input_compress_format) > 0:
        if input_compress_format == "zip":
            zip_file_name = "compress_file.zip"
            print(f"{input_folder_path}中的文件被压缩至{zip_file_name}")
            print("压缩中, 请等待......")
            compress_zip(input_folder_path, zip_file_name)
            print("压缩完毕\n\n按下任意键结束")
        elif input_compress_format == "7z":
            seven_z_file_name = "compress_file.7z"
            print(f"{input_folder_path}中的文件被压缩至{seven_z_file_name}")
            print("压缩中, 请等待......")
            compress_7z(input_folder_path, seven_z_file_name)
            print("压缩完毕\n\n按下任意键结束")
        else:
            print("输入的不是zip或7z格式,无法压缩\n")
            print("按下任意键结束")

# 防止程序自行结束
msvcrt.getch()

3.4、Decompress.py

########################################
########################################
# @author leon
# @date 2023-06-26
# @description 将当前目录下的zip/7z/rar解压
########################################
########################################
import glob
import msvcrt
import os
import zipfile
import rarfile
import py7zr


# 解压zip
def decompress_zip(zip_file_name, decompress_file_name):
    with zipfile.ZipFile(zip_file_name, "r") as zip_ref:
        for file_info in zip_ref.infolist():
            # try:
            #     file_info.filename = file_info.filename.encode('cp437').decode('utf-8')
            #     # file_info.filename = unidecode(file_info.filename)
            # except UnicodeDecodeError:
            #     file_info.filename = file_info.filename.encode('cp437').decode('gbk')
            print(f"decompress --- {file_info.filename}")
            zip_ref.extract(file_info, decompress_file_name)


# 解压7z
def decompress_7z(seven_z_file_name, decompress_file_name):
    with py7zr.SevenZipFile(seven_z_file_name, "r") as seven_z_archive:
        seven_z_archive.extractall(decompress_file_name)
        # files = seven_z_archive.list()
        # for file_info in files:
        #     file_name = file_info.filename
        #     print(f"decompress --- {file_name}")
        #     seven_z_archive.extract(decompress_file_name)


# 解压rar
def decompress_rar(rar_file_name, decompress_file_name):
    with rarfile.RarFile(rar_file_name, "r") as rar_ref:
        for file_info in rar_ref.infolist():
            # try:
            #     file_info.filename = file_info.filename.encode('cp437').decode('utf-8')
            # except UnicodeDecodeError:
            #     file_info.filename = file_info.filename.encode('cp437').decode('gbk')
            print(f"decompress --- {file_info.filename}")
            rar_ref.extract(file_info, decompress_file_name)


# 搜索当前文件中的zip/rar
compress_files = glob.glob("*.zip") + glob.glob("*.7z") + glob.glob("*.rar")
compress_cnt = len(compress_files)


# 解压文件名
def get_decompress_name(temp_compress_name):
    if temp_compress_name.endswith(".zip"):
        return temp_compress_name.replace(".zip", "")
    elif temp_compress_name.endswith(".7z"):
        return temp_compress_name.replace(".7z", "")
    else:
        return temp_compress_name.replace(".rar", "")


# 开始解压
if compress_cnt > 0:
    print(f"当前文件夹有{compress_cnt}个压缩文件(zip/rar/7z)")
    for compress_file in compress_files:
        compress_name = os.path.basename(compress_file)
        decompress_name = get_decompress_name(compress_name)
        print(f"{compress_name}  ------>  {decompress_name}")
        print("解压中, 请等待......")
        if compress_name.endswith(".zip"):
            # zip
            decompress_zip(compress_name, decompress_name)
            print("解压完毕\n\n按下任意键结束")
        elif compress_name.endswith(".7z"):
            # 7z
            decompress_7z(compress_name, decompress_name)
            print("解压完毕\n\n按下任意键结束")
        else:
            # rar
            decompress_rar(compress_name, decompress_name)
            # patoolib.extract_archive(compress_name, decompress_name)
            print("解压完毕\n\n按下任意键结束")
else:
    print("当前文件夹中没有zip/rar文档\n")
    print("按下任意键结束")

# 防止程序自行结束
msvcrt.getch()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM框架模板(高配:一次性配完所有需要的配置文件)

目录 一、pom.xml文件配置(基本不需要修改) 二、applicationContex.xml文件的配置。(这里只有一个地方需要修改) 三、mybatis-config.xml文件配置(根据需要修改) 四、配置web.xml文件(基本不…

Redis实战案例10-优惠券1-全局唯一ID

1. 全局ID生成器 id的规律性明显造成某些信息的泄露; 使用自增ID作为主键会导致一些问题。首先,由于自增ID必须是唯一的,因此当达到最大值时,无法再向表中插入新的数据,这限制了表的数据量。例如:订单如果一…

基本介绍实施工程师,以及实施工程师在软件开发的作用

一.软件实施介绍 1.什么是软件实施? 软件实施是指将软件开发完成后,按照计划进行部署和安装,使软件能够在目标环境中正常运行的过程。下面是软件实施的一般步骤: 1. 规划和准备:确定实施的范围、目标和计划&#xff0…

如何将PNG格式照片转换为JPG格式

如何将PNG格式照片转换为JPG格式 当您需要在网络上共享或存储图像时,将PNG格式的照片转换为JPG格式是一个常见的需求。本文将介绍一些关于将PNG格式照片转换为JPG格式的相关知识。 问题与解决方案 图像质量损失 在将PNG格式照片转换为JPG格式的过程中&#xff0…

IMX6ULL 移植篇-uboot 网络命令NFS

一. uboot 网络操作命令 本文介绍 nfs 命令的使用,具体是:通过 NFS服务向开发板下载 zImage内核镜像文件。 二. nfs 命令 nfs命令使用的目的:为了方便开发板调试。 nfs(Network File System) 网络文件系统,通过 nfs 可以在计算…

MyBatis实现主键ID、创建时间、更新时间的自动填充

注意事项 一:如果插入时有设置的值就使用之前设置的值,不带时才自动赋值。 二:xml文件中必须带有需要自动赋值的字段,否则无法知道赋值(如id、create_time、update_time) 代码详解 注解: …

【vue2+echarts】树状图(标签显示不全、节点文本过长换行等问题解决)

前言 树状图的使用。官方文档 正文 关于根节点标签显示不全问题解决 一开始的series->边距设置的如下。所以根节点的标签只显示了一半多出来。 top: "1%",left: "7%",bottom: "1%",right: "20%",后面修改成 top: "1%"…

css基础知识十八:CSS如何画一个三角形?原理是什么?

一、前言 在前端开发的时候,我们有时候会需要用到一个三角形的形状,比如地址选择或者播放器里面播放按钮 通常情况下,我们会使用图片或者svg去完成三角形效果图,但如果单纯使用css如何完成一个三角形呢? 实现过程似乎…

Maven安装与配置以及idea配置Maven

文章目录 一、安装本地Maven 二、安装 三、配置环境变量 四、配置settings文件 五、idea配置 一、安装本地Maven 选择你需要的maven版本下载:官网下载传送门 我使用的是3.6.1版本:maven-3.6.1-bin.zip ​ 二、安装 把下载好的maven压缩包解压到…

小样本目标检测综述__刘浩宇(导航与控制2021)论文阅读

小样本目标检测综述__刘浩宇(导航与控制2021)阅读 0、引言 早期采用了大量标注样本回归候选框的位置,但后来目标集和训练集数据分布不同导致检测效果下降。 对于没有大量样本支持的小样本检测应用就需要使用先验知识来弥补样本的不足。 可以分为三类&#xff1a…

Redis实战——商户查询(二)

缓存穿透 缓存穿透 :客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这样的请求都会访问到数据库,这样的大量请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库,对数据库造…

js:使用diff.js实现文本内容差异比较

实现效果 目录 简介安装示例1、json比较diffJson2、按行比较diffLines3、比较数组diffArrays 总结参考资料 简介 A javascript text differencing implementation. 译文:javascript文本差异实现。 相关文档 github https://github.com/kpdecker/jsdiffnpmjs htt…

YoloV8改进---注意力机制:高斯上下文变换器GCT,性能优于ECA、SE等注意力模块 | CVPR2021

目录 1.GCT介绍 实验结果 2.GCT引入到yolov8 2.1 修改modules.py中: 2.2 加入tasks.py中: 2.3 yolov8_GCT.yaml 3.YOLOv8魔术师专栏介绍 1.GCT介绍 论文:https://openaccess.thecvf.com/content/CVPR2021/papers/Ruan_Gaussian_Context_…

MySQL数据库架构

MySQL数据库架构 MySQL架构自顶向下大致可以分为连接层 , SQL层 , 存储引擎层 , 物理文件层。架构如下 连接层 -- 查看最大连接数 show variables like %max_connections%;客户端连接器,MySQL向外提供交互接口连接各种不同的客户端。 客户端/应用程序:客…

7.3.6 【Linux】磁盘/文件系统参数修订

mknod 用到的磁盘 /dev/vda 的相关设备代码如下: 上表当中 252 为主要设备代码 (Major) 而 0~5 则为次要设备代码 (Minor)。 我们的Linux 核心认识的设备数据就是通过这两个数值来决定的!举例来说&#xf…

如何批量将PDF转换为图片?

在生活工作中,我们会处理很多电子合同。这些电子合同一般是PDF格式,不但存储空间大,且预览起来不太便捷,需要我们转换为图片格式更方便预览。如果人工一一处理比较繁琐复杂,有没有什么方案可以快速将pdf转换为图片呢&a…

如果想用unity做一个项目作为面试作品,至少该达到什么样的标准?

本文仅针对题目“如果想用unity做一个项目作为面试作品,至少该达到什么样的标准?”回答内容。 明确职业目标 首先要明确自身的职业目标,不同的行业、公司、游戏类型、岗位对作品的要求是不同的。 去什么样的行业?unity可做的有很…

python的IOError使用

try:npzfile np.load(calibrate.npz)mtx npzfile[mtx]dist npzfile[dist]except IOError:calibrate()python语言IOError错误一般多发生在对文件操作报错时,表示要打开的文件不存在

PostpreSQL内核学习-Chapter4 Foreign Data Wrapper(FDW)

FDW连接 preparations 两个在不同主机(满足TCP/IP连接是分属于不同IP地址下)(如果是安装PG源码)进入源码目录下面的/contrib/postgres_fdw/,然后用make & make install编译和安装 [rootlocalhost /]# cd 源码存…

为什么truncate函数(四舍五入)是x+0.4999997而不是+0.5?

目录 float的不精确表示 0.5的舍入方法 该方法的漏洞 0.4999997f舍入的结果错误 以0.4999997f改进舍入方法 可以用0.49999996、0.49999998或者0.49999999替换0.49999997吗? 在做舍入函数研究时,发现函数中实现四舍五入的trunc函数大概采用的逻辑是floor(…