py脚本一键生成常见文件格式案例

我的常见:附件上传测试...

bash 复制代码
import os
import csv
import json

# 引入第三方库 (需先 pip install)
try:
    from docx import Document
    from openpyxl import Workbook
    from reportlab.pdfgen import canvas
    from PIL import Image, ImageDraw, ImageFont
except ImportError as e:
    print("❌ 缺少依赖库,请先运行: pip install python-docx openpyxl reportlab Pillow")
    exit()

# 配置输出目录
OUTPUT_DIR = "test_data"


def init_dir():
    if not os.path.exists(OUTPUT_DIR):
        os.makedirs(OUTPUT_DIR)
        print(f"📁 已创建目录: {OUTPUT_DIR}")


def gen_txt():
    """生成 TXT 文件"""
    path = os.path.join(OUTPUT_DIR, "test.txt")
    with open(path, "w", encoding="utf-8") as f:
        f.write("这是一个测试文本文件。\n用于测试转换 OFD 功能。\nHello World!")
    print(f"✅ 生成 TXT: {path}")


def gen_csv():
    """生成 CSV 文件"""
    path = os.path.join(OUTPUT_DIR, "test.csv")
    with open(path, "w", encoding="utf-8", newline='') as f:
        writer = csv.writer(f)
        writer.writerow(["ID", "Name", "Role"])
        writer.writerow(["1001", "Chen Fei", "Admin"])
        writer.writerow(["1002", "Zhang San", "User"])
    print(f"✅ 生成 CSV: {path}")


def gen_json():
    """生成 JSON 文件"""
    path = os.path.join(OUTPUT_DIR, "test.json")
    data = {
        "project": "OFD Converter",
        "version": 1.0,
        "supported_formats": ["doc", "pdf", "txt"]
    }
    with open(path, "w", encoding="utf-8") as f:
        json.dump(data, f, indent=4)
    print(f"✅ 生成 JSON: {path}")


def gen_xml():
    """生成 XML 文件"""
    path = os.path.join(OUTPUT_DIR, "test.xml")
    content = """<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Developer</to>
  <from>Admin</from>
  <heading>Test OFD</heading>
  <body>Don't forget to handle this file!</body>
</note>"""
    with open(path, "w", encoding="utf-8") as f:
        f.write(content)
    print(f"✅ 生成 XML: {path}")


def gen_html():
    """生成 HTML 文件"""
    path = os.path.join(OUTPUT_DIR, "test.html")
    content = """<!DOCTYPE html>
<html>
<head><title>Test Page</title></head>
<body>
<h1>Hello OFD</h1>
<p>This is a test html page.</p>
</body>
</html>"""
    with open(path, "w", encoding="utf-8") as f:
        f.write(content)
    print(f"✅ 生成 HTML: {path}")


def gen_docx():
    """生成 Word (.docx) 文件"""
    path = os.path.join(OUTPUT_DIR, "test.docx")
    doc = Document()
    doc.add_heading('OFD 测试文档', 0)
    doc.add_paragraph('这是一个由 Python 自动生成的 Word 文档。')
    doc.add_paragraph('用于验证 Spire.Doc 转 OFD 的效果。')
    doc.save(path)
    print(f"✅ 生成 DOCX: {path}")


def gen_xlsx():
    """生成 Excel (.xlsx) 文件"""
    path = os.path.join(OUTPUT_DIR, "test.xlsx")
    wb = Workbook()
    ws = wb.active
    ws.title = "测试数据"
    # 写入表头
    ws['A1'] = "文件名"
    ws['B1'] = "格式"
    ws['C1'] = "状态"
    # 写入数据
    ws.append(["test.docx", "Word", "Ready"])
    ws.append(["test.pdf", "PDF", "Ready"])
    wb.save(path)
    print(f"✅ 生成 XLSX: {path}")


def gen_pdf():
    """生成 PDF 文件"""
    path = os.path.join(OUTPUT_DIR, "test.pdf")
    c = canvas.Canvas(path)
    c.drawString(100, 800, "Hello OFD Converter!")
    c.drawString(100, 780, "This is a standard PDF document generated by Python.")
    c.drawString(100, 760, "Format: A4")
    c.save()
    print(f"✅ 生成 PDF: {path}")


def gen_image(fmt="png"):
    """生成图片 (jpg/png)"""
    path = os.path.join(OUTPUT_DIR, f"test.{fmt}")
    # 创建一个 400x200 的白色背景图片
    img = Image.new('RGB', (400, 200), color=(73, 109, 137))
    d = ImageDraw.Draw(img)
    # 写入简单的文字 (默认字体)
    d.text((20, 80), f"Test Image ({fmt.upper()})", fill=(255, 255, 255))
    img.save(path)
    print(f"✅ 生成 {fmt.upper()}: {path}")


if __name__ == "__main__":
    print("🚀 开始生成测试文件...")
    init_dir()

    # 办公文档
    gen_docx()
    gen_xlsx()
    gen_pdf()

    # 文本数据
    gen_txt()
    gen_csv()
    gen_json()
    gen_xml()
    gen_html()

    # 图片
    gen_image("png")
    gen_image("jpg")

    print("\n🎉 所有文件生成完毕!请查看 test_data 文件夹。")
相关推荐
辰辉创聚8 分钟前
In Vivo抗体是什么?| 体内抗体与普通科研抗体的区别
人工智能·python·时序数据库·in vivo抗体·体内抗体·体内级抗体
深圳市宝华视联11 分钟前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
4311媒体网13 分钟前
帝国CMS网站自定义搭建技巧
服务器·开发语言·前端
布莱克60518 分钟前
C++拷贝构造与拷贝赋值运算符的区别详解
开发语言·c++
门思科技29 分钟前
LoRaWAN Regional Parameters:为什么 CN470 和 EU868 的频点数不同
python·物联网
lhldsg36 分钟前
全民健身解决方案:从共享球场到智能运营的技术实践
java·大数据·开发语言·需求分析
Joseph 乔1 小时前
【Python】卸载与重装
经验分享·python
归去来?1 小时前
Python 常用优雅写法
开发语言·python
名字还没想好☜1 小时前
Java 21 switch 模式匹配实战:sealed 接口 + record 替代 if-instanceof 链
java·人工智能·后端·python·spring
深蓝海拓1 小时前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt