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

1、下载Python编译器

在这里插入图片描述

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()

猜你喜欢

转载自blog.csdn.net/weixin_41733225/article/details/131423571