Python调用Tika实现一站式提取PDF/Word/Excel

 更新时间:2026年04月10日 08:44:59   作者:无心水  
Apache Tika是一款强大的开源内容分析工具,支持1000多种文件格式的统一解析,本文将从零开始,带你全面掌握Apache Tika的环境搭建,Python调用,元数据提取,扫描件OCR和内嵌附件解析

一个API搞定上千种文档格式,从文本提取到OCR识别,从元数据到内嵌附件

前言

你是不是也遇到过这样的场景:项目里要处理PDF,你装了pdfplumber;来了Word文档,又得引入python-docx;碰到Excel表格,再装个openpyxl;突然来了一份PPT,还得去找python-pptx……

每种格式都有一套独立的API,学习成本高,维护更头疼。

今天的主角——Apache Tika,就是为了解决这个问题而生的。它把超过1000种文件格式的解析能力整合到一个统一接口中,无论是PDF、Word、Excel,还是PPT、图片、扫描件,一套API全搞定。

本文将从零开始,带你全面掌握Apache Tika:环境搭建、Python调用、元数据提取、扫描件OCR、内嵌附件解析,再到企业级服务部署和批量解析,一篇搞定。

一、Tika核心价值:多格式统一解析

1.1 什么是Apache Tika?

Apache Tika是由Apache软件基金会开发的开源内容分析工具包,基于Java实现,能够自动检测并解析超过1000种文件格式(如PDF、Office文档、多媒体文件等),提取元数据、结构化文本内容及语言属性,为搜索引擎和内容索引工具提供统一接口。

简单说,Tika是一个“格式万能转换器”——不管输入什么格式,输出都是统一的文本内容和元数据。

1.2 Tika能解析哪些文件格式?

Tika支持超过1000种文件格式,以下是几类核心支持格式:

类别具体格式
办公文档Microsoft Word (.doc/.docx)、Excel (.xls/.xlsx)、PowerPoint (.ppt/.pptx)、Visio、Outlook
PDF文档标准PDF、加密PDF、扫描PDF(需配合OCR)
开放文档OpenDocument (ODT/ODS/ODP)、RTF
图像文件JPEG、PNG、GIF、BMP、TIFF
压缩包ZIP、RAR、TAR、GZIP
标记语言HTML、XML、JSON
多媒体音频文件(MP3等)、视频文件(MP4等)

1.3 Tika的核心优势

1.统一接口,一套API打天下

无论你面对的是PDF、Word文档还是Excel表格,Tika都提供相同的API接口,大大简化了开发工作。

2.自动格式检测

Tika能够自动识别文档格式,无需手动指定文件类型,智能化地根据文件内容而非扩展名来判断真实类型。

3.强大的OCR支持

除了处理数字文档,Tika还集成了Tesseract OCR引擎,能够从扫描文档和图像中提取文本内容。

4.元数据与语言识别

不仅可以提取文本内容,还能获取文档的元信息(标题、作者、创建时间、修改时间等)以及自动识别文本的语言类型。

二、环境搭建:Java环境配置 + Tika安装/启动

2.1 环境要求

  • Java版本:Java 11或更高版本(推荐使用LTS版本,如JDK 17)
  • 操作系统:Windows / macOS / Linux

2.2 方式一:Tika Server(最推荐)

Tika Server是Apache Tika提供的轻量级REST服务,基于Tika核心库封装为Web服务器形式,能够通过HTTP接口处理文件解析请求。

步骤1:下载Tika Server JAR

# 下载最新版本(以2.9.1为例)
wget https://dlcdn.apache.org/tika/tika-server-2.9.1.jar

步骤2:启动Tika Server

java -jar tika-server-2.9.1.jar

默认监听端口为9998,可以通过参数修改端口:

java -jar tika-server-2.9.1.jar --port=8080

步骤3:验证服务是否正常运行

curl http://localhost:9998/tika

如果返回This is Tika Server.,说明服务已正常启动。

2.3 方式二:Docker部署(生产环境推荐)

使用Docker部署Tika Server是最简便的方式,尤其适合生产环境:

# docker-compose.yml
services:
  tika:
    image: apache/tika:3.2.2.0-full
    container_name: tika-server
    ports:
      - "9998:9998"
    restart: unless-stopped

启动命令:

docker-compose up -d

为什么推荐Docker部署? 使用Docker部署可以避免Java环境配置的麻烦,同时提供环境一致性。官方推荐使用-full版本,它包含了完整的解析器依赖。

2.4 方式三:Tika App(命令行工具)

如果你只是想快速测试或偶尔使用,可以直接下载Tika App JAR:

java -jar tika-app-2.9.1.jar --text myfile.pdf

2.5 Java项目集成(Maven)

如果是在Java项目中直接集成,需要在pom.xml中添加依赖。需要注意,Tika 2.x已将原来的tika-parsers模块拆分为多个子模块:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-bom</artifactId>
            <version>2.17.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!-- 标准解析器包(必选)-->
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers-standard-package</artifactId>
    </dependency>
</dependencies>

三、Python调用Tika:解析文本、提取元数据

3.1 安装Python Tika库

Python的Tika库封装了与Tika Server交互的复杂性,使得在Python中使用Tika变得十分简单:

pip install tika

3.2 基础用法:提取文本内容

from tika import parser
# 指定Tika Server地址(如果是本地默认端口,可省略)
server_url = 'http://127.0.0.1:9998'
# 解析文件
parsed = parser.from_file('path/to/document.pdf', server_url)
# 获取文本内容
print("文本内容:\n", parsed["content"])
# 获取元数据
print("\n元数据:", parsed["metadata"])

3.3 提取元数据详解

Tika能够提取丰富的元数据信息,包括:

from tika import parser
parsed = parser.from_file('report.docx')
metadata = parsed["metadata"]
print(f"文档标题: {metadata.get('title', '无')}")
print(f"作者: {metadata.get('Author', '无')}")
print(f"创建时间: {metadata.get('dcterms:created', '无')}")
print(f"修改时间: {metadata.get('Last-Modified', '无')}")
print(f"文件类型: {metadata.get('Content-Type', '无')}")
print(f"页数: {metadata.get('xmpTPg:NPages', '无')}")
print(f"文件大小: {metadata.get('Content-Length', '无')}")

3.4 从URL直接解析

Tika也支持直接从URL读取文件进行解析:

from tika import parser
parsed = parser.from_url('https://example.com/document.pdf')
print(parsed["content"])

3.5 处理二进制数据

如果你已经有了文件的二进制数据(例如从HTTP上传接收到的),可以直接传入:

from tika import parser
with open('document.pdf', 'rb') as f:
    binary_data = f.read()
parsed = parser.from_buffer(binary_data)
print(parsed["content"])

四、高级能力:自动处理加密PDF、扫描件(联动OCR)

4.1 Tika 2.x中OCR的变化

在Tika 2.x版本中,OCR行为发生了重大变化:现在如果系统PATH中安装了Tesseract,PDF的OCR会默认自动触发

这意味着:

  • 如果你处理的是扫描件PDF,Tika会自动调用Tesseract进行OCR识别
  • 如果你的PDF已经是文本型PDF,OCR不会额外运行(避免重复)
  • 如果你不想使用OCR,需要通过配置显式禁用

4.2 安装Tesseract OCR引擎

Tika调用Tesseract进行OCR识别,因此需要先安装Tesseract引擎:

Windows

  • 下载安装程序:https://github.com/UB-Mannheim/tesseract/wiki
  • 安装时勾选“简体中文”语言包
  • 将安装路径添加到系统PATH环境变量

macOS

brew install tesseract
brew install tesseract-lang  # 安装语言包

Linux (Ubuntu/Debian)

sudo apt-get install tesseract-ocr
sudo apt-get install tesseract-ocr-chi-sim  # 简体中文语言包

验证安装:

tesseract --version

4.3 Python中处理扫描件PDF

安装Tesseract并确保在PATH中后,Python调用代码无需任何修改:

from tika import parser
# Tika 2.x会自动检测是否为扫描件,并调用Tesseract OCR
parsed = parser.from_file('scanned_document.pdf')
print("OCR识别结果:\n", parsed["content"])

4.4 禁用OCR(当不需要时)

如果你的PDF已经是文本型,但系统安装了Tesseract,OCR可能会被自动触发,导致处理速度变慢。此时可以通过配置禁用OCR:

方式一:通过tika-config.xml配置(Java集成)

<?xml version="1.0" encoding="UTF-8"?>
<properties>
  <parsers>
    <parser class="org.apache.tika.parser.pdf.PDFParser">
      <params>
        <param name="OCR_STRATEGY" type="string">NO_OCR</param>
      </params>
    </parser>
  </parsers>
</properties>

方式二:通过HTTP请求头(Tika Server)

curl -T scanned.pdf http://localhost:9998/tika \
  -H "X-Tika-PDFOcrStrategy: no_ocr"

4.5 加密PDF处理

Tika支持处理加密的PDF文件,需要在解析时提供密码:

from tika import parser
# 通过headers传递密码
headers = {
    "X-Tika-PDFPassword": "your_password"
}
parsed = parser.from_file('encrypted.pdf', headers=headers)
print(parsed["content"])

五、附件提取:解析PDF内嵌附件

5.1 为什么需要附件提取?

很多PDF文件中包含内嵌附件(如嵌入的Excel表格、Word文档、图片等),这些附件中可能包含关键信息。Tika提供了递归解析能力,能够自动检测并提取这些嵌套内容。

5.2 通过Tika Server提取附件

Tika Server提供了/rmeta端点,可以递归解析嵌套文档(如嵌入ZIP内的DOCX):

import requests
def extract_with_attachments(file_path, tika_url='http://localhost:9998'):
    """提取文档内容及其附件"""
    with open(file_path, 'rb') as f:
        files = {'file': f}
        # 使用 /rmeta 端点获取递归元数据
        response = requests.put(
            f'{tika_url}/rmeta/text',
            files=files,
            headers={'Accept': 'application/json'}
        )
    return response.json()
# 使用示例
result = extract_with_attachments('document_with_attachments.pdf')
print(result)

5.3 处理压缩包内的文件

Tika还能处理压缩文件,如ZIP或TAR包,使你能够访问包内的文件内容:

from tika import unpack
# 解析压缩包
parsed = unpack.from_file('archive.zip')
# 遍历压缩包内的所有文件
for file_name, content in parsed.items():
    print(f"文件: {file_name}")
    print(f"内容预览: {content[:200]}...")

5.4 递归解析嵌套结构

对于多层嵌套的文档(如PDF中嵌入ZIP,ZIP中又有Excel),可以使用递归解析:

from tika import parser
import json
def recursive_parse(file_path, depth=0):
    """递归解析文档及其附件"""
    parsed = parser.from_file(file_path)
    result = {
        'file': file_path,
        'depth': depth,
        'content': parsed['content'][:500] if parsed['content'] else '',
        'metadata': parsed['metadata']
    }
    # 检查是否有嵌入的附件(需要进一步处理)
    # 实际实现中可通过metadata中的embedded resources判断
    return result

六、企业级落地:搭建Tika基础解析服务

6.1 为什么需要独立部署Tika Server?

在直接集成Tika到应用内的方式中,文档解析与主应用共享同一JVM内存空间。一旦解析大文件时内存需求超出限制,就会导致整个应用程序崩溃。

独立部署Tika Server的核心优势:

  • 错误隔离:即使Tika Server崩溃,主应用依然稳定运行
  • 资源可控:可以为解析任务分配独立的内存资源
  • 可水平扩展:部署多个Tika Server实例,通过负载均衡分发请求
  • 多语言调用:任何支持HTTP的语言都可以调用

6.2 生产级Docker Compose配置

version: '3.8'
services:
  tika:
    image: apache/tika:3.2.2.0-full
    container_name: tika-server
    ports:
      - "9998:9998"
    environment:
      - TIKA_MEMORY_LIMIT=2048m
      - TIKA_TIMEOUT=120
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9998/tika"]
      interval: 30s
      timeout: 10s
      retries: 3

6.3 Python客户端封装(生产级)

import requests
from typing import Dict, Any, Optional
import logging
logger = logging.getLogger(__name__)
class TikaClient:
    """生产级Tika Server客户端"""
    def __init__(self, base_url: str = "http://localhost:9998", timeout: int = 120):
        self.base_url = base_url.rstrip('/')
        self.timeout = timeout
    def extract_text(self, file_path: str, password: Optional[str] = None) -> str:
        """提取文本内容"""
        with open(file_path, 'rb') as f:
            headers = {}
            if password:
                headers['X-Tika-PDFPassword'] = password
            response = requests.put(
                f"{self.base_url}/tika",
                data=f,
                headers=headers,
                timeout=self.timeout
            )
            response.raise_for_status()
            return response.text
    def extract_metadata(self, file_path: str) -> Dict[str, Any]:
        """提取元数据"""
        with open(file_path, 'rb') as f:
            response = requests.put(
                f"{self.base_url}/meta",
                data=f,
                timeout=self.timeout
            )
            response.raise_for_status()
            return response.json()
    def extract_with_metadata(self, file_path: str) -> Dict[str, Any]:
        """同时提取文本和元数据(推荐使用)"""
        with open(file_path, 'rb') as f:
            response = requests.put(
                f"{self.base_url}/rmeta/text",
                data=f,
                headers={'Accept': 'application/json'},
                timeout=self.timeout
            )
            response.raise_for_status()
            return response.json()
    def detect_type(self, file_path: str) -> str:
        """检测文件MIME类型"""
        with open(file_path, 'rb') as f:
            response = requests.put(
                f"{self.base_url}/detect/stream",
                data=f,
                timeout=self.timeout
            )
            response.raise_for_status()
            return response.text.strip()
    def health_check(self) -> bool:
        """健康检查"""
        try:
            response = requests.get(f"{self.base_url}/tika", timeout=5)
            return response.status_code == 200
        except Exception:
            return False
# 使用示例
client = TikaClient()
if client.health_check():
    # 提取文本
    text = client.extract_text("document.pdf")
    print(f"文本长度: {len(text)} 字符")
    # 提取元数据
    metadata = client.extract_metadata("document.pdf")
    print(f"作者: {metadata.get('Author', '未知')}")

6.4 Tika Server关键REST API端点

端点方法功能
/tikaPUT提取纯文本
/metaPUT提取元数据
/rmeta/textPUT提取文本+元数据(JSON格式)
/detect/streamPUT检测文件MIME类型
/language/streamPUT语言识别
/unpackPUT解压并提取压缩包内容

七、代码示例:多文件批量解析并输出JSON

7.1 场景描述

假设你有一个目录,里面混杂着PDF、Word、Excel等多种格式的文件,需要批量提取文本内容和元数据,并统一输出为JSON格式。

7.2 完整代码实现

import os
import json
import argparse
from typing import Dict, List, Any
from concurrent.futures import ThreadPoolExecutor, as_completed
from tika import parser
import logging
# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
class BatchParser:
    """批量文档解析器"""
    # 支持的文件扩展名
    SUPPORTED_EXTENSIONS = {
        '.pdf', '.doc', '.docx', '.xls', '.xlsx', 
        '.ppt', '.pptx', '.txt', '.html', '.xml',
        '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'
    }
    def __init__(self, tika_server_url: str = None, max_workers: int = 4):
        self.tika_server_url = tika_server_url
        self.max_workers = max_workers
    def parse_single_file(self, file_path: str) -> Dict[str, Any]:
        """解析单个文件"""
        try:
            logger.info(f"解析: {file_path}")
            parsed = parser.from_file(file_path, self.tika_server_url)
            if parsed is None:
                return {
                    'file': file_path,
                    'error': '解析返回空结果',
                    'content': '',
                    'metadata': {}
                }
            return {
                'file': file_path,
                'content': parsed.get('content', ''),
                'metadata': parsed.get('metadata', {}),
                'error': None
            }
        except Exception as e:
            logger.error(f"解析失败: {file_path}, 错误: {str(e)}")
            return {
                'file': file_path,
                'error': str(e),
                'content': '',
                'metadata': {}
            }
    def parse_directory(self, directory: str, recursive: bool = True) -> List[Dict]:
        """批量解析目录下的所有文件"""
        results = []
        files_to_parse = []
        # 收集所有需要解析的文件
        if recursive:
            for root, _, files in os.walk(directory):
                for file in files:
                    ext = os.path.splitext(file)[1].lower()
                    if ext in self.SUPPORTED_EXTENSIONS:
                        files_to_parse.append(os.path.join(root, file))
        else:
            for file in os.listdir(directory):
                file_path = os.path.join(directory, file)
                if os.path.isfile(file_path):
                    ext = os.path.splitext(file)[1].lower()
                    if ext in self.SUPPORTED_EXTENSIONS:
                        files_to_parse.append(file_path)
        logger.info(f"共发现 {len(files_to_parse)} 个待解析文件")
        # 使用线程池并发解析
        with ThreadPoolExecutor(max_workers=self.max_workers) as executor:
            future_to_file = {
                executor.submit(self.parse_single_file, file_path): file_path
                for file_path in files_to_parse
            }
            for future in as_completed(future_to_file):
                result = future.result()
                results.append(result)
        return results
    def export_to_json(self, results: List[Dict], output_path: str):
        """导出结果为JSON文件"""
        with open(output_path, 'w', encoding='utf-8') as f:
            json.dump(results, f, ensure_ascii=False, indent=2)
        logger.info(f"结果已导出到: {output_path}")
def main():
    parser = argparse.ArgumentParser(description='批量文档解析工具')
    parser.add_argument('input', help='输入文件或目录路径')
    parser.add_argument('-o', '--output', default='parsed_results.json', 
                        help='输出JSON文件路径')
    parser.add_argument('-r', '--recursive', action='store_true', 
                        help='递归遍历子目录')
    parser.add_argument('-w', '--workers', type=int, default=4, 
                        help='并发线程数')
    parser.add_argument('--tika-server', help='Tika Server地址')
    args = parser.parse_args()
    # 创建解析器
    batch_parser = BatchParser(
        tika_server_url=args.tika_server,
        max_workers=args.workers
    )
    # 判断输入是文件还是目录
    if os.path.isfile(args.input):
        # 单文件解析
        logger.info(f"解析单个文件: {args.input}")
        result = batch_parser.parse_single_file(args.input)
        batch_parser.export_to_json([result], args.output)
    elif os.path.isdir(args.input):
        # 目录批量解析
        logger.info(f"批量解析目录: {args.input}")
        results = batch_parser.parse_directory(args.input, args.recursive)
        batch_parser.export_to_json(results, args.output)
        # 统计信息
        success_count = sum(1 for r in results if r['error'] is None)
        error_count = len(results) - success_count
        logger.info(f"解析完成: 成功 {success_count}, 失败 {error_count}")
    else:
        logger.error(f"路径不存在: {args.input}")
if __name__ == "__main__":
    main()

7.3 使用示例

# 批量解析目录下所有文件
python batch_parser.py /path/to/documents -o results.json -r

# 解析单个文件
python batch_parser.py document.pdf -o result.json

# 指定Tika Server和并发数
python batch_parser.py /path/to/documents -o results.json -w 8 --tika-server http://192.168.1.100:9998

7.4 输出JSON示例

[
  {
    "file": "/documents/report.pdf",
    "content": "这是从PDF中提取的文本内容...",
    "metadata": {
      "Author": "张三",
      "Content-Type": "application/pdf",
      "dcterms:created": "2024-01-15T10:30:00Z",
      "xmpTPg:NPages": "25"
    },
    "error": null
  },
  {
    "file": "/documents/data.xlsx",
    "content": "表格数据提取结果...",
    "metadata": {
      "Author": "李四",
      "Content-Type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      "title": "季度报表"
    },
    "error": null
  }
]

八、常见问题与解决方案

Q1:启动Tika Server时报Java版本错误?

Tika 2.x需要Java 11+,请确认Java版本:

java -version

如果版本过低,请升级JDK或使用Tika 1.x版本(但1.x已停止维护)。

Q2:Python调用Tika时超时怎么办?

Tika默认超时时间较短,对于大文件可以增加超时设置:

from tika import parser
import tika
# 设置全局超时(单位:秒)
tika.TikaClientOnly.timeout = 120
parsed = parser.from_file('large_file.pdf')

Q3:处理大文件时内存溢出(OOM)怎么办?

这是直接集成Tika的常见问题。推荐方案:部署独立的Tika Server,通过将高资源消耗的解析任务卸载到独立的进程中,实现有效的错误隔离。

如果必须直接集成,可以:

// Java代码中限制解析内容大小
BodyContentHandler handler = new BodyContentHandler(10 * 1024 * 1024); // 限制10MB

Q4:中文OCR识别效果不好?

确保安装了中文语言包:tesseract-langtesseract-ocr-chi-sim

在请求头中指定OCR语言:

curl -T scanned.pdf http://localhost:9998/tika \
  -H "X-Tika-OCRLanguage: chi_sim"

Q5:解析结果中出现重复文本怎么办?

当PDF本身已包含OCR文本层(双层PDF),同时Tika又再次运行OCR时,会导致重复。解决方案:在Tika 2.x中通过配置禁用OCR。

# 通过headers禁用OCR
headers = {"X-Tika-PDFOcrStrategy": "no_ocr"}
parsed = parser.from_file('dual_layer.pdf', headers=headers)

九、总结

核心要点回顾

要点说明
统一接口一个API支持超过1000种文件格式,屏蔽解析差异
部署方式Tika Server(推荐)、Docker、Tika App、Java直接集成
Python集成pip install tika + Tika Server,两行代码搞定
OCR集成Tika 2.x自动检测扫描件并调用Tesseract,需安装Tesseract引擎
附件提取通过/rmeta端点和unpack模块递归解析嵌套文档
企业级部署独立Tika Server实现错误隔离、资源可控、水平扩展

工具选型对比

场景推荐方案
快速测试/学习Tika App命令行
Python项目集成Tika Server + tika-python
Java项目集成Maven依赖直接集成
生产环境(高并发)Docker部署Tika Server集群
处理大文件/扫描件Tika Server独立部署
需要处理内嵌附件Tika Server + /rmeta端点

何时选择Tika?

  • 多格式混搭:项目需要处理PDF、Word、Excel等多种格式
  • 追求统一:不想为每种格式学习不同的API
  • 需要元数据:除了文本,还需要作者、创建时间等元信息
  • 多语言支持:Python、Java、Node.js等都能调用
  • 企业级需求:需要高可用、可扩展的解析服务
  • 纯PDF处理:如果只需要处理PDF,更轻量的pdfplumberPyMuPDF可能更合适
  • 极致性能:Tika Server有HTTP开销,对延迟极度敏感的场景需评估

附录:速查表

Tika Server常用命令

命令说明
java -jar tika-server-2.9.1.jar默认端口9998启动
curl -T file.pdf http://localhost:9998/tika提取文本
curl -T file.pdf http://localhost:9998/meta提取元数据
curl -T file.pdf http://localhost:9998/detect/stream检测MIME类型

Python tika库常用API

API说明
parser.from_file(path)从文件解析
parser.from_buffer(data)从二进制数据解析
parser.from_url(url)从URL解析
unpack.from_file(path)解压压缩包

以上就是Python调用Tika实现一站式提取PDF/Word/Excel的详细内容,更多关于Python Tika提取PDF Word Excel的资料请关注脚本之家其它相关文章!

相关文章

  • Python Arrow处理时间数据使用详解(标准库之外另一种选择)

    Python Arrow处理时间数据使用详解(标准库之外另一种选择)

    这篇文章主要介绍了Python标准库之外Arrow处理时间数据的另一种选择使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • mac系统安装Python3初体验

    mac系统安装Python3初体验

    这篇文章主要介绍了mac系统安装Python3初体验,需要的朋友可以参考下
    2018-01-01
  • Python使用DEAP库实现简单遗传算法

    Python使用DEAP库实现简单遗传算法

    DEAP是一个用于快速原型设计和实验的进化计算框架,它支持多种进化算法,包括遗传算法、遗传编程等,下面我们来看看如何使用DEAP库实现简单遗传算法吧
    2025-01-01
  • 零基础白领必须掌握的Python自动化办公技巧

    零基础白领必须掌握的Python自动化办公技巧

    在快节奏的现代职场中,数据汇总、报表制作、文件整理等重复性劳动往往占据了我们大量的工作时间,作为一门简洁、易学的编程语言,Python 已经成为现代白领提升工作效率的秘密武器,本文将系统地为你介绍零基础白领必须掌握的Python办公技巧,需要的朋友可以参考下
    2026-04-04
  • 详解使用CUDA+OpenCV加速yolo v4性能

    详解使用CUDA+OpenCV加速yolo v4性能

    这篇文章主要介绍了使用CUDA+OpenCV加速yolo v4性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python项目--使用Tkinter的日历GUI应用程序

    python项目--使用Tkinter的日历GUI应用程序

    在 Python 中,我们可以使用 Tkinter 制作 GUI。如果你非常有想象力和创造力,你可以用 Tkinter 做出很多有趣的东西,希望本篇文章能够帮到你
    2021-08-08
  • numpy中的converters和usecols用法详解

    numpy中的converters和usecols用法详解

    本文主要介绍了numpy中的converters和usecols用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • python使用参数对嵌套字典进行取值的方法

    python使用参数对嵌套字典进行取值的方法

    这篇文章主要介绍了python使用参数对嵌套字典进行取值,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • python实现与arduino的串口通信的示例代码

    python实现与arduino的串口通信的示例代码

    本文主要介绍了python实现与arduino的串口通信的示例代码, 在Python中,我们可以使用pyserial库来实现与Arduino的串口通信,下面就来介绍一下如何使用,感兴趣的可以了解一下
    2024-01-01
  • Django 删除upload_to文件的步骤

    Django 删除upload_to文件的步骤

    这篇文章主要介绍了Django 删除upload_to文件的步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论