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

解释:

这个错误表明你尝试导入的lxml.html.clean模块已经变成了一个独立的项目。在旧版本的lxml库中,lxml.html.cleanlxml的一部分,但现在它已经被分离出来,作为一个独立的第三方库。

解决方法:

  1. 你需要安装新的lxml独立版本,可以通过pip安装:

    
    
    
    pip install lxml-clean
  2. 修改你的代码,将导入语句从from lxml.html.clean import Cleaner

    改为from lxml_clean import Cleaner

  3. 如果你的代码中还有其他lxml.html.clean相关的引用,也需要做出相应的修改。

确保在修改代码后,重新运行你的程序以验证问题是否已经解决。

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



from masonite.facades import View
 
def test(view):
    # 使用Facade模式渲染视图并返回响应
    return View.render('view', {'key': 'value'})

在这个例子中,我们导入了Masonite的View Facade,并在test函数中使用它来渲染名为view的视图模板,同时传递一个包含键值对的字典作为上下文。这是一个简化的示例,展示了如何在Masonite框架中使用Facade模式来简化对于依赖项的访问。

2024-09-09

Masonite 是一个Python编写的web框架,它提供了一个简洁而强大的开发环境,帮助开发者更快速地构建Web应用。

安装Masonite的步骤如下:

  1. 确保Python环境已经安装,推荐使用Python 3.6以上版本。
  2. 使用pip安装Masonite:



pip install masonite
  1. 创建一个新的Masonite项目:



masonite new myproject
  1. 进入项目目录:



cd myproject
  1. 运行数据库迁移,创建本地数据库,并生成数据库迁移文件:



masonite migrate
  1. 启动开发服务器:



masonite serve

以上步骤会启动一个开发服务器,默认监听在localhost的8000端口。

注意:确保在安装Masonite之前,系统的环境变量已经配置正确,以便能够找到Python和pip命令。

2024-09-06



import shelve
 
class ExampleClass:
    def __init__(self, name, value):
        self.name = name
        self.value = value
 
    def display(self):
        print(f"{self.name} => {self.value}")
 
# 创建ExampleClass实例
example_instance = ExampleClass("example", 1)
 
# 持久化实例到shelf
with shelve.open('example_shelf.db') as shelf:
    shelf['example_object'] = example_instance
 
# 从shelf中恢复实例
with shelve.open('example_shelf.db') as shelf:
    recovered_instance = shelf['example_object']
 
# 显示恢复的实例
recovered_instance.display()

这段代码演示了如何创建一个简单的类实例,并将其保存到一个shelf文件中。然后,代码展示了如何从shelf中恢复这个实例并调用其方法。这个过程演示了如何使用shelve模块来存储和访问Python对象。

2024-09-06

在Python中,对象复制通常可以通过内置的copy模块来实现。copy模块提供了copy函数进行浅复制,以及deepcopy函数进行深复制。

浅复制(copy): 复制对象本身,但不复制对象内部的子对象。

深复制(deepcopy): 复制对象及其内部的所有子对象。

以下是使用copy模块的例子:




import copy
 
# 浅复制示例
original_list = [1, 2, 3, [4, 5]]
copied_list = copy.copy(original_list)
 
original_list[3][0] = "changed"
 
print(original_list)  # 输出: [1, 2, 3, ['changed', 5]]
print(copied_list)    # 输出: [1, 2, 3, [4, 5]]
 
# 深复制示例
original_dict = {1: [2, 3], 2: [4, 5]}
deep_copied_dict = copy.deepcopy(original_dict)
 
original_dict[1][0] = "changed"
 
print(original_dict)  # 输出: {1: [‘changed’, 3], 2: [4, 5]}
print(deep_copied_dict)  # 输出: {1: [2, 3], 2: [4, 5]}

在这个例子中,我们创建了一个列表和一个字典,并分别对它们进行了浅复制和深复制。我们修改了原始列表中嵌套列表的一个元素,并观察了浅复制和深复制的结果。可以看到浅复制的副本在这种情况下受到影响,而深复制的副本则保持原样。

2024-09-06

报错信息 "module 'numpy' has no attribute" 表示尝试从 numpy 模块访问一个不存在的属性。这通常是由于代码中的拼写错误或者是在更新 numpy 库之后代码中的某些部分不再兼容。

解决方法:

  1. 检查属性名是否拼写正确。
  2. 确认代码中使用的 numpy 版本与导入该属性的方式是否兼容。
  3. 如果是在使用 sklearn 库时遇到此错误,请确保 numpy 的版本与 sklearn 所依赖的版本兼容。
  4. 尝试更新 numpy 到最新版本:pip install --upgrade numpy
  5. 如果问题依旧,尝试重新安装 numpy:pip uninstall numpy 然后 pip install numpy

如果这些步骤不能解决问题,请提供更具体的错误信息,包括哪个属性无法找到以及出现错误的代码上下文。

2024-09-06

在Python的Masonite框架中创建一个计划任务,你需要定义一个命令并将其添加到计划任务中。以下是一个简单的例子:

  1. 创建一个命令:



from masonite.command import Command
 
class HelloCommand(Command):
    """
    Prints 'Hello World' to the console.
    """
    def run(self):
        print('Hello World')
  1. 注册这个命令到schedule方法内的Kernel类:



from masonite.scheduling import Scheduler
from masonite.view import View
from app.HelloCommand import HelloCommand
 
class Kernel:
    ...
    def schedule(self, scheduler: Scheduler):
        scheduler.command(HelloCommand()).every().minute()

在这个例子中,我们创建了一个简单的HelloCommand命令,它打印出"Hello World"到控制台。然后在Kernel类的schedule方法中,我们使用了Scheduler对象来注册这个命令,并设置了这个命令每分钟运行一次。

确保你的计划任务在schedule方法中正确定义,并且你的应用程序的Kernel类继承自masonite.app.AppKernel。计划任务将通过cron作业调度执行。

2024-09-06

Python 的 re 模块提供了对正则表达式的支持。

以下是一些常用的 Python3 re 模块的方法和代码示例:

  1. re.match()

match 函数从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。




import re
 
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('com', 'www.runoob.com').span())  # 不在起始位置匹配
  1. re.search()

search 方法会扫描整个字符串并返回第一个成功的匹配。




import re
 
print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配
  1. re.findall()

findall 方法扫描整个字符串并返回所有成功的匹配。




import re
 
print(re.findall('www', 'www.runoob.com'))  # 在起始位置匹配
print(re.findall('com', 'www.runoob.com'))  # 不在起始位置匹配
  1. re.split()

split 方法将一个字符串通过正则表达式进行分割。




import re
 
print(re.split('\W+', 'runoob, runoob, runoob.com'))
  1. re.sub()

sub 方法用于替换字符串中匹配正则表达式的部分。




import re
 
print(re.sub(r'\d', 'H', 'runoob 123, runoob 456'))
  1. re.fullmatch()

fullmatch 函数检查整个字符串是否匹配给定的模式。




import re
 
print(re.fullmatch('www', 'www.runoob.com'))  # 在起始位置匹配
print(re.fullmatch('com', 'www.runoob.com'))  # 不在起始位置匹配
  1. re.compile()

compile 函数用于编译正则表达式,生成一个正则表达式对象,可以用于 match() 和 search() 方法查找字符串。




import re
 
pattern = re.compile('www')
 
print(pattern.search('www.runoob.com').span())
print(pattern.match('www.runoob.com').span())
  1. re.purge()

purge 方法清除编译的正则表达式模式的缓存。




import re
 
for i in range(10):
    re.compile('#' + str(i))
 
print(len(re.purge()))

以上就是 Python3 re 模块的一些常用方法和代码示例。