2024-11-20

在数据处理和分析工作中,Excel 是常见的工具,而 Python 凭借其强大的库生态,为 Excel 的操作提供了高效、灵活的解决方案。本文将带你全面了解如何用 Python 与 Excel 进行交互,涵盖常用库、代码实例、关键知识点总结,并附上思维导图。


一、常用库简介

以下是 Python 操作 Excel 的常用库:

  1. openpyxl
    用于读取、写入 Excel(.xlsx 格式)。
  2. pandas
    数据分析的强大工具,可快速处理 Excel 数据。
  3. xlrd
    用于读取 Excel 文件(支持 .xls 和部分 .xlsx)。
  4. xlwt
    用于写入 Excel 文件(主要用于 .xls)。
  5. xlsxwriter
    强调创建复杂格式的 .xlsx 文件。
  6. pyexcel
    多格式支持的库,适合跨文件类型操作。

二、代码实例

示例 1:用 openpyxl 创建并写入 Excel 文件

from openpyxl import Workbook

# 创建一个工作簿
wb = Workbook()
ws = wb.active

# 写入数据
ws['A1'] = "姓名"
ws['B1'] = "成绩"
ws.append(["张三", 90])
ws.append(["李四", 85])

# 保存文件
wb.save("example_openpyxl.xlsx")
print("Excel 文件已创建!")

示例 2:用 pandas 读取和写入 Excel 文件

import pandas as pd

# 读取 Excel 文件
df = pd.read_excel("example_openpyxl.xlsx")
print("读取的内容:")
print(df)

# 修改数据并写入新文件
df.loc[1, '成绩'] = 95  # 修改李四的成绩
df.to_excel("example_pandas.xlsx", index=False)
print("修改后的文件已保存!")

示例 3:用 xlsxwriter 创建带样式的 Excel 文件

import xlsxwriter

# 创建一个工作簿
workbook = xlsxwriter.Workbook("example_xlsxwriter.xlsx")
worksheet = workbook.add_worksheet()

# 定义格式
bold = workbook.add_format({'bold': True})
center = workbook.add_format({'align': 'center'})

# 写入带格式的内容
worksheet.write('A1', '姓名', bold)
worksheet.write('B1', '成绩', bold)
worksheet.write_row('A2', ['张三', 90])
worksheet.write_row('A3', ['李四', 85], center)

# 关闭工作簿
workbook.close()
print("Excel 文件已创建并带样式!")

三、关键知识点总结

知识点描述
Excel 文件格式.xls(Excel 2003 及以前),.xlsx(Excel 2007 及以后)。
库的选择根据任务需求选择合适的库,如数据分析推荐 Pandas,样式设置推荐 xlsxwriter。
单元格操作openpyxlxlsxwriter 支持单元格精细化操作,包括格式、公式等。
数据框与 ExcelPandas 的 DataFrame 是处理 Excel 数据的高效选择。
格式化与性能xlsxwriter 强调格式化,但不支持读取文件;openpyxl 支持完整读写。

四、思维导图

以下是 Python 与 Excel 交互的知识结构思维导图:

Python 与 Excel 交互
├── 常用库
│   ├── openpyxl
│   ├── pandas
│   ├── xlrd/xlwt
│   ├── xlsxwriter
│   ├── pyexcel
├── 文件格式
│   ├── .xls
│   ├── .xlsx
├── 主要功能
│   ├── 数据读取
│   │   ├── 单元格/区域
│   │   ├── 数据框
│   ├── 数据写入
│   │   ├── 单元格精确写入
│   │   ├── 数据框批量写入
│   ├── 文件格式化
│   │   ├── 设置字体、颜色
│   │   ├── 加入公式
│   ├── 文件性能优化
│       ├── 批量处理
│       ├── 内存管理

五、总结

使用 Python 操作 Excel 不仅效率高,还能满足复杂的需求。从简单的读取与写入,到格式化与性能优化,Python 提供了丰富的工具选择。推荐初学者从 openpyxlpandas 入手,逐步深入了解其他库的功能。

通过上述实例和知识点,你将能轻松应对日常的 Excel 数据处理任务!

2024-09-09

报错解释:

DPI-1047错误通常表示Oracle客户端无法加载SQL*Net库或者无法找到指定的Oracle数据库连接信息。

解决方法:

  1. 确认Oracle客户端已正确安装在您的系统上。
  2. 检查环境变量是否设置正确,特别是ORACLE_HOME,它应该指向Oracle客户端软件的安装目录。
  3. 如果你使用的是32位Python和64位Oracle客户端,或者反之,确保二者的位数一致。
  4. 确认你的tnsnames.ora文件中是否有正确的连接描述符,并且确保TNS_ADMIN环境变量指向包含此文件的目录。
  5. 如果你使用的是连接字符串而不是tnsnames.ora,请确保连接字符串格式正确无误。
  6. 确保Oracle客户端的版本与Python连接库(如cx\_Oracle)兼容。

如果以上步骤无法解决问题,可以尝试重新安装Oracle客户端或者检查Oracle的官方文档和支持论坛获取更多帮助。

2024-09-09



from django.shortcuts import render
from django.http import HttpResponse
 
# 创建一个简单的视图函数,返回一个问候语
def hello(request):
    return HttpResponse("Hello, Django!")
 
# 创建一个带有模板的视图函数,返回一个渲染好的HTML页面
def greet_template(request):
    context = {'name': 'Django'}
    return render(request, 'greet_template.html', context)

在这个例子中,我们定义了两个视图函数hellogreet_templatehello函数使用HttpResponse直接返回一个字符串。greet_template函数使用render函数,它接受一个字典作为上下文,并渲染一个名为greet_template.html的模板,最后返回渲染后的HTML页面。这展示了如何在Django中使用视图函数和模板系统。

2024-09-09

由于pysqlcipher3库是一个专门为Python 3设计的SQLCipher绑定,它不需要从源代码进行编译安装。你可以直接使用pip来安装。

首先,确保你的系统上安装了pip。然后,在命令行终端运行以下命令来安装pysqlcipher3




pip install pysqlcipher3

如果你遇到任何与编译相关的问题,可能是因为你的系统缺少必要的编译工具或SQLCipher库。对于Windows系统,你可能需要下载预编译的二进制文件。

对于Linux系统,你可能需要安装一些必要的开发工具和SQLCipher的开发库:




# For Debian/Ubuntu
sudo apt-get install libsqlcipher-dev
 
# For Red Hat/CentOS
sudo yum install sqlcipher-devel
 
# For Arch Linux
sudo pacman -S sqlcipher

对于macOS,你可以使用Homebrew来安装SQLCipher:




brew install sqlcipher

如果你在安装过程中遇到问题,请确保你的Python版本与pysqlcipher3兼容,并查看该库的官方文档或错误信息以获取更多的安装指导。

2024-09-09

Django是一个开放源代码的Web应用框架,由Python写成。它适用于快速开发和维护大型网站。以下是一个简单的Django项目创建和运行的例子:

首先,确保你已经安装了Django。如果没有安装,可以通过pip安装:




pip install django

创建一个新的Django项目:




django-admin startproject myproject

这将创建一个名为myproject的新目录,包含初始的项目结构。

进入项目目录,运行开发服务器:




cd myproject
python manage.py runserver

现在,你的Django应用程序将运行在本地开发服务器上,默认情况下,它会在http://127.0.0.1:8000/上可用。

创建一个应用:




python manage.py startapp myapp

这将创建一个名为myapp的新目录,包含处理应用程序逻辑所需的模型、视图和模板的基本文件。

要完成一个简单的应用程序,你可以编辑myapp/views.py来包含一个视图:




from django.http import HttpResponse
 
def home(request):
    return HttpResponse("Hello, World!")

然后,你需要在myproject/myproject/urls.py中添加一个URL路由来指向这个视图:




from django.urls import path
from myapp import views
 
urlpatterns = [
    path('', views.home, name='home'),
]

再次运行开发服务器,并在浏览器中打开http://127.0.0.1:8000/,你将看到"Hello, World!"的消息。

2024-09-09



# 导入Django数据库相关模块
from django.db import models
 
# 创建一个名为Book的数据模型
class Book(models.Model):
    # 书籍名称,字符串类型,最大长度50,不允许为空
    title = models.CharField(max_length=50, blank=False)
    # 作者名称,字符串类型,最大长度50,允许为空
    author = models.CharField(max_length=50, blank=True)
    # 出版日期,日期类型
    pub_date = models.DateField()
 
    # 定义一个方法,用于返回书籍信息的字符串表示
    def __str__(self):
        return f"{self.title} by {self.author} on {self.pub_date}"
 
# 使用Django管理工具注册Book模型
admin.site.register(Book)

这段代码定义了一个简单的数据模型Book,包含书籍名称、作者名称和出版日期。同时,提供了一个方法__str__用于返回书籍信息的字符串表示,并且示例中展示了如何在Django管理后台注册这个模型。这有助于开发者理解如何在Django中创建数据模型并进行管理。

2024-09-09

在Python的Masonite框架中,实现限流机制通常可以通过中间件来实现。以下是一个简单的示例,展示了如何创建一个中间件来限制每分钟内的请求次数。

首先,在你的应用的app/http/middleware目录下创建一个新的中间件文件ThrottleMiddleware.py




from masonite.request import Request
from masonite.response import Response
 
class ThrottleMiddleware:
    def before(self, request: Request, response: Response):
        # 检查是否已经超出了限制次数
        if 'X-Throttle-Limit' in request.headers:
            limit = int(request.headers.get('X-Throttle-Limit'))
            if request.user().throttle_exceeded(limit):
                return response.json({'error': 'Too Many Requests'}, status=429)
 
    def after(self, request: Request, response: Response):
        # 在这里可以记录请求或更新限制计数器
        pass

然后,在app/User.py模型中添加限流逻辑:




from masonite import Session
 
class User:
    ...
 
    def throttle_exceeded(self, limit):
        # 获取当前用户的请求计数器
        request_count = Session.get('request_count', 0)
 
        # 如果请求次数超过限制,返回True
        if request_count >= limit:
            return True
 
        # 否则更新请求计数并返回False
        Session.set('request_count', request_count + 1)
        return False

最后,在routes.py中注册中间件:




from masonite.routes import Get, Post, Route
from app.http.middleware import ThrottleMiddleware
 
ROUTES = [
    Get('/').middleware(ThrottleMiddleware),
    # 其他路由
]

这样,每当有请求通过/路由时,就会触发ThrottleMiddleware中间件,从而实现限流保护。记得在config/app.py中配置Session驱动,以便在中间件中使用Session来记录请求次数。

2024-09-09



import sqlite3
 
# 连接到SQLite数据库
# 数据库文件是 test.db,如果文件不存在,会自动在当前目录创建:
conn = sqlite3.connect('test.db')
 
# 创建一个Cursor:
cursor = conn.cursor()
 
# 执行一条SQL语句,创建user表:
cursor.execute('CREATE TABLE IF NOT EXISTS user (id VARCHAR(20) PRIMARY KEY, name VARCHAR(20))')
 
# 关闭Cursor:
cursor.close()
 
# 执行查询语句,插入记录:
cursor = conn.cursor()
cursor.execute("INSERT INTO user (id, name) VALUES ('1', 'Michael')")
cursor.execute("INSERT INTO user (id, name) VALUES ('2', 'John')")
cursor.execute("INSERT INTO user (id, name) VALUES ('3', 'Sarah')")
conn.commit()
cursor.close()
 
# 关闭Connection:
conn.close()

这段代码展示了如何在Python中使用SQLite3进行基本的数据库操作,包括连接数据库、创建表格、关闭Cursor和Connection。在插入数据前先检查表是否存在,以避免重复创建导致的错误。最后,提交事务并关闭所有操作的资源。

2024-09-09



import sqlite3
 
# 连接到数据库,如果数据库不存在则在当前目录创建数据库文件
conn = sqlite3.connect('example.db')
 
# 创建一个Cursor对象
cursor = conn.cursor()
 
# 执行一条SQL语句,创建user表
cursor.execute('CREATE TABLE IF NOT EXISTS user (id VARCHAR(20) PRIMARY KEY, name VARCHAR(20))')
 
# 关闭Cursor对象
cursor.close()
 
# 提交事务
conn.commit()
 
# 关闭连接
conn.close()

这段代码演示了如何使用sqlite3模块来创建一个SQLite数据库和一个简单的表。首先,它建立了一个数据库连接,然后创建了一个Cursor对象以执行SQL命令。代码中的CREATE TABLE IF NOT EXISTS语句确保如果表已经存在,则不会重复创建。最后,代码关闭了Cursor对象并提交了事务,然后关闭了数据库连接。

2024-09-09



# Django 项目的settings.py中配置数据库连接
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用mysql数据库
        'NAME': 'mydatabase',                  # 数据库名
        'USER': 'mydatabaseuser',              # 数据库用户名
        'PASSWORD': 'mypassword',              # 数据库密码
        'HOST': 'localhost',                   # 数据库主机地址
        'PORT': '3306',                        # 数据库端口
    }
}
 
# 定义模型(Model)
from django.db import models
 
class Person(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
 
    def __str__(self):
        return self.name
 
# 运行迁移命令,创建或更新数据库表结构
# 在Django项目的根目录下运行以下命令:
# python manage.py makemigrations
# python manage.py migrate
 
# 使用Django ORM进行数据库操作
from myapp.models import Person
 
# 创建一个Person对象
person = Person(name='John Doe', age=25)
person.save()
 
# 获取所有Person对象
all_persons = Person.objects.all()
 
# 过滤Person对象
older_than_20 = Person.objects.filter(age__gt=20)
 
# 更新Person对象
person.name = 'Jane Doe'
person.save()
 
# 删除Person对象
person.delete()

这段代码展示了如何在Django中定义一个模型,运行数据库迁移,并展示了如何使用Django ORM进行基本的数据库操作,包括创建、读取、更新和删除(CRUD)。这是Web开发中数据持久化的一个基本例子,对于学习者来说具有很好的教育价值。