日本黄色av片 用python撸一个文档转markdown的小用具(代码已分享)
发布日期:2025-07-03 15:17 点击次数:161
最近有个名堂上用到了文档转为markdown的需求,因为之前齐是用别东说念主的制品用具,今天我用python写了一个文档(word、pdf)转markdown的用具,分享一说念代码日本黄色av片,有需要的一又友不错平直拿去用,代码拿去不需要任何修改就能使用,要是你以为功能单一,你也不错无间优化,代码已放在github上。
【文末有相易群】
插曲:本期短剧分享主邀功能撑执转机文档类型: PDF、word转为markdown撑执上传文献的方式: 单文献上传(单文献转机)、多文献上传(批量转机)、上传文献夹(批量转机)下载转机后markdown文献:撑执单文献下载、批量下载图片
上传界面图片
转机后下载竣工代码私信“转markdown名堂代码”github名堂地址https://github.com/zlpu/files_convert_markdown在线体验https://3mw.cn/31kcd名堂结构本名堂使用Flask框架进行开发python版块:3.9file_convert_markdown/│├── app.py├── requirements.txt├── templates/│ ├── index.html├── static/│ └── uploads/├── utils/ ├── __init__.py ├── convert_pdf_to_md.py └── convert_word_to_md.py部署启动方式1.腹地python启动
下载代码后,平直启动python app.py即可
方式2.docker启动名堂代码中我已提供Dcokerfile文献,不错平直构建镜像该名堂我已打包docker镜像,镜像不错从公有仓库拉取,使用方式如下:docker run -itd --name=file_convert_md01 -p 5000:5000 --restart=always registry.cn-hangzhou.aliyuncs.com/pzl_images/files_convert_markdown:v20240604代码实质1. requirements.txt
创建一个requirements.txt文献来列出所需的Python库:
flaskpython-docxpdfminer.six2. app.py
主旁边文献app.py:
"""作家:微信公众号-IT软件保举员邮箱:pzl960504@outlook.com名堂名:文档转markdown"""from flask import Flask, render_template, request, redirect, url_for, flash, send_from_directory, send_fileimport osimport reimport zipfilefrom werkzeug.utils import secure_filenamefrom utils.convert_pdf_to_md import convert_pdf_to_mdfrom utils.convert_word_to_md import convert_word_to_mdfrom io import BytesIOfrom docx.opc.exceptions import PackageNotFoundError # 导入 PackageNotFoundErrorapp = Flask(__name__)# 开荒文献上传和Markdown文献的保存目次app.config['UPLOAD_FOLDER'] = 'static/uploads/'app.config['MARKDOWN_FOLDER'] = 'static/markdowns/'app.config['ALLOWED_EXTENSIONS'] = {'pdf', 'docx'}app.secret_key = 'supersecretkey'# 要是上传文献的目次不存在,则创建它if not os.path.exists(app.config['UPLOAD_FOLDER']): os.makedirs(app.config['UPLOAD_FOLDER'])# 要是Markdown文献的目次不存在,则创建它if not os.path.exists(app.config['MARKDOWN_FOLDER']): os.makedirs(app.config['MARKDOWN_FOLDER'])# 查验文献扩张名是否被允许def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']# 清算文献名,去除无效字符并法度化文献名def sanitize_filename(filename): # 删除无效字符并法度化文献名 filename = re.sub(r'[^a-zA-Z0-9_一-龥.]+', '_', filename) return filename@app.route('/', methods=['GET', 'POST'])def index(): if request.method == 'POST': files = request.files.getlist('files[]') # 取得上传的文献列表 folder_files = request.files.getlist('folder[]') # 取得上传的文献夹内文献列表 all_files = files + folder_files # 统一通盘文献 markdown_files = [] # 用于存储生成的Markdown文献列表 for file in all_files: if file and allowed_file(file.filename): # 要是文献存在且是允许的类型 filename = file.filename sanitized_filename = sanitize_filename(filename) # 清算文献名 filepath = os.path.join(app.config['UPLOAD_FOLDER'], sanitized_filename) # 生成文献保存的旅途 # 创建必要的目次结构 os.makedirs(os.path.dirname(filepath), exist_ok=True) file.save(filepath) # 保存文献 try: # 凭据文献类型调遣为Markdown样式 if filename.rsplit('.', 1)[1].lower() == 'pdf': md_content = convert_pdf_to_md(filepath) elif filename.rsplit('.', 1)[1].lower() == 'docx': md_content = convert_word_to_md(filepath) md_filename = sanitized_filename.rsplit('.', 1)[0] + '.md' # 生成Markdown文献名 md_filepath = os.path.join(app.config['MARKDOWN_FOLDER'], md_filename) # 生成Markdown文献保存旅途 with open(md_filepath, 'w', encoding='utf-8') as md_file: md_file.write(md_content) # 写入Markdown实质 markdown_files.append(md_filename) # 添加到Markdown文献列表 except PackageNotFoundError: flash(f'文献 {file.filename} 不是有用的DOCX文献') except Exception as e: flash(f'责罚文献 {file.filename} 时发生失实: {str(e)}') return render_template('index.html', markdown_files=markdown_files) # 渲染模板并传递Markdown文献列表 return render_template('index.html')@app.route('/download/<filename>')def download_file(filename): # 从目次中发送文献,动作附件下载 return send_from_directory(app.config['MARKDOWN_FOLDER'], filename, as_attachment=True)@app.route('/download_all', methods=['POST'])def download_all(): filenames = request.form.getlist('filenames') # 取得表单中采取的文献名列表 if not filenames: flash('莫得采用文献进行下载') return redirect(url_for('index')) # 创建一个字节流对象,用于保存 ZIP 文献 zip_stream = BytesIO() with zipfile.ZipFile(zip_stream, 'w', zipfile.ZIP_DEFLATED) as zipf: for filename in filenames: filepath = os.path.join(app.config['MARKDOWN_FOLDER'], filename) zipf.write(filepath, arcname=filename) # 将文献写入 ZIP 文献 zip_stream.seek(0) # 复返 ZIP 文献动作反应 return send_file(zip_stream, mimetype='application/zip', as_attachment=True, download_name='markdown_files.zip')if __name__ == '__main__': app.run(debug=True, host='0.0.0.0')3. templates/index.html
创建一个好意思不雅的HTML文献templates/index.html来展示简历信息:
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>文档转Markdown</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <!-- 使用相对旅途添加Favicon --> <link rel="icon" href="https://www.runoob.com/wp-content/uploads/2019/03/iconfinder_markdown_298823.png" type="image/x-icon"> <link rel="shortcut icon" href=" https://www.runoob.com/wp-content/uploads/2019/03/iconfinder_markdown_298823.png" type="image/x-icon"></head><body> <div class="container mt-5"> <h1 class="text-center">文档转Markdown</h1> <!-- 添加图片 --> <div class="text-center"> <img src="https://picture.gptkong.com/20240604/22485b1e3ed546421e904c0634bac1f331.png" style="width: 30%;" alt="Logo"> </div> <!-- 添加知道翰墨 --> <p class="text-center">撑执将PDF和Word文档调遣为Markdown样式。</p> <form action="{{ url_for('index') }}" method="post" enctype="multipart/form-data"> <div class="form-group"> <label for="file">采用文献</label> <input type="file" class="form-control-file" id="file" name="files[]" multiple> </div> <div class="form-group"> <label for="folder">采用文献夹</label> <input type="file" class="form-control-file" id="folder" name="folder[]" multiple webkitdirectory directory> </div> <button type="submit" class="btn btn-primary">上传并调遣</button> </form> {% with messages = get_flashed_messages() %} {% if messages %} <div class="alert alert-info mt-3"> {% for message in messages %} <p>{{ message }}</p> {% endfor %} </div> {% endif %} {% endwith %} {% if markdown_files %} <h3 class="mt-5">调遣后的文献</h3> <form action="{{ url_for('download_all') }}" method="post"> <ul class="list-group"> {% for filename in markdown_files %} <li class="list-group-item"> <input type="checkbox" name="filenames" value="{{ filename }}"> {{ filename }} <a href="{{ url_for('download_file', filename=filename) }}" class="btn btn-success btn-sm float-right">下载</a> </li> {% endfor %} </ul> <button type="submit" class="btn btn-primary mt-3">批量下载</button> </form> {% endif %} </div></body></html>4. utils/convert_pdf_to_md.py
编写PDF转Markdown的用具函数:
from pdfminer.high_level import extract_textdef convert_pdf_to_md(filepath): text = extract_text(filepath) # 粗拙的文本转 Markdown,不错凭据需要进行更复杂的调遣 md_text = text.replace('\n', ' \n') return md_text5. utils/convert_word_to_md.py
编写Word转Markdown的用具函数:
妇科 偷拍from docx import Documentdef convert_word_to_md(filepath): doc = Document(filepath) md_text = "" for para in doc.paragraphs: md_text += para.text + ' \n' return md_text6. 启动名堂
装配所需的Python库:
pip install -r requirements.txt
启动Flask旁边:
python app.py
造访http://127.0.0.1:5000/,就不错在浏览器上使用这个文献转markdown样式的用具
要是不念念使用传统的启动方式,不错使用docker来创建办事,提供docker镜像封装方针,封装成镜像后,浅易使用
docker镜像封装# 使用官方Python基础镜像FROM python:3.9# 开荒责任目次WORKDIR /app# 将requirements.txt复制到责任目次COPY requirements.txt .# 装配Python依赖RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 复制现时目次下通盘文献到责任目次COPY . .# 涌现旁边端口(假定你的旁边在5000端口启动)EXPOSE 5000# 开荒环境变量(要是有需要)#ENV APP_ENV=production# 启动旁边要害CMD ["python", "app.py"]镜像构建
docker build -t 镜像称呼:v1 .创建容器(跑办事)
docker run -it --name=file_to_md -p 5000:5000 镜像称呼:v1
造访http://127.0.0.1:5000/,就不错在浏览器上使用这个文献转markdown样式的用具
请勿铺张日本黄色av片
接待人人神志、点赞、储藏、点亮在看 本站仅提供存储办事,通盘实质均由用户发布,如发现存害或侵权实质,请点击举报。- 上一篇:国产 人兽 看懂八大K线格式
- 下一篇:日本黄色av片 中华传统文化的主要精髓七条