75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
import os
|
||
import requests
|
||
import zipfile
|
||
import io
|
||
|
||
# 1. 配置基础参数
|
||
url = "http://10.168.1.103:4000/extract" # 请确保此处的 IP 和端口与服务端保持一致
|
||
source_dir = "./Papers/ORI_PDF"
|
||
target_dir = "./Papers/ORI_MD"
|
||
|
||
# 2. 确保源目录存在,避免报错
|
||
if not os.path.exists(source_dir):
|
||
print(f"错误: 找不到源文件夹 '{source_dir}'")
|
||
exit(1)
|
||
|
||
# 确保目标主文件夹存在
|
||
os.makedirs(target_dir, exist_ok=True)
|
||
|
||
# 3. 遍历源文件夹下的所有文件
|
||
for filename in os.listdir(source_dir):
|
||
# 只处理 PDF 文件
|
||
if not filename.lower().endswith(".pdf"):
|
||
continue
|
||
|
||
file_path = os.path.join(source_dir, filename)
|
||
# 获取去掉 .pdf 后缀的文件名
|
||
pdf_name_no_ext = os.path.splitext(filename)[0]
|
||
|
||
# 对应的输出文件夹路径
|
||
output_folder = os.path.join(target_dir, pdf_name_no_ext)
|
||
|
||
# ==========================================
|
||
# 【新增逻辑】:检查是否已经处理过
|
||
# 如果输出文件夹已存在,且内部有文件,则视为已转换,直接跳过
|
||
# ==========================================
|
||
if os.path.exists(output_folder) and len(os.listdir(output_folder)) > 0:
|
||
print(f"⏩ 已存在转换结果,跳过处理: {filename}")
|
||
continue
|
||
|
||
print(f"正在上传并处理 {filename}...")
|
||
|
||
try:
|
||
# 4. 发送请求
|
||
with open(file_path, "rb") as f:
|
||
files = {"file": (filename, f, "application/pdf")}
|
||
response = requests.post(url, files=files)
|
||
|
||
# 5. 处理响应结果
|
||
if response.status_code == 200:
|
||
# 【新增防护】:检查服务端是否返回了包含报错信息的 JSON
|
||
if response.headers.get('content-type') == 'application/json':
|
||
error_msg = response.json()
|
||
print(f"❌ 服务端处理失败 ({filename}):{error_msg.get('message', '未知错误')}")
|
||
continue # 跳过解压,处理下一个
|
||
|
||
# 确保该 PDF 专属的输出文件夹存在
|
||
os.makedirs(output_folder, exist_ok=True)
|
||
|
||
# 核心:使用 io.BytesIO 直接在内存中读取 zip 内容并解压
|
||
try:
|
||
with zipfile.ZipFile(io.BytesIO(response.content)) as zip_ref:
|
||
zip_ref.extractall(output_folder)
|
||
print(f"✅ 成功!已解压并保存至文件夹: {output_folder}")
|
||
except zipfile.BadZipFile:
|
||
print(f"❌ 失败!{filename} 返回的内容不是有效的 ZIP 格式。")
|
||
else:
|
||
print(f"❌ 失败!{filename} 状态码: {response.status_code}, 报错: {response.text}")
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"❌ 网络请求异常 ({filename}): {e}")
|
||
except Exception as e:
|
||
print(f"❌ 处理 {filename} 时发生未知错误: {e}")
|
||
|
||
print("-" * 30)
|
||
print("批量处理任务结束!") |