超级实用的python代码片段汇总和详细解析(16个)(下)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 超级实用的python代码片段汇总和详细解析(16个)

超级实用的python代码片段汇总和详细解析(16个)(上):https://developer.aliyun.com/article/1489864

8.Excel表格读写

import pandas as pd
def read_excel(file_path):
    df = pd.read_excel(file_path)
    return df
def write_to_excel(data, file_path):
    df = pd.DataFrame(data)
    df.to_excel(file_path, index=False)

函数 read_excel 和 write_to_excel,用于读取和写入 Excel 文件。两个函数都使用了 Pandas 库,一个 Python 的数据分析库。


1. read_excel 函数


这个函数接受一个参数 file_path,表示要读取的 Excel 文件的路径。

2. write_to_excel 函数


这个函数接受两个参数:data 和 file_path。data 是一个字典、列表或其他可以被转换为 DataFrame 的数据结构,file_path 是要写入数据的 Excel 文件的路径。


通过这两个函数,你可以方便地读取和写入 Excel 文件,而不需要关心底层的 Excel 文件操作细节。

9.合并Excel表格工作簿

import pandas as pd
def merge_sheets(file_path, output_file_path):
    xls = pd.ExcelFile(file_path)
    df = pd.DataFrame()
    for sheet_name in xls.sheet_names:
        sheet_df = pd.read_excel(xls, sheet_name)
        df = df.append(sheet_df)
        df.to_excel(output_file_path, index=False)

函数 merge_sheets 用于将多个 Excel 工作表(sheets)合并到一个单一的 DataFrame 中,并将该 DataFrame 保存到一个新的 Excel 文件中。以下是代码的逐行解释:


  1. import pandas as pd
    导入 pandas 库,并为其指定一个别名 pd。Pandas 是一个用于数据分析和处理的 Python 库。
  2. def merge_sheets(file_path, output_file_path):
    定义一个名为 merge_sheets 的函数,该函数接受两个参数:file_path(要合并的 Excel 文件的路径)和 output_file_path(输出文件的路径)。
  3. xls = pd.ExcelFile(file_path)
    使用 pandas 的 ExcelFile 类来读取 file_path 指定的 Excel 文件,并将其存储在 xls 变量中。
  4. df = pd.DataFrame()
    创建一个空的 DataFrame 对象 df。这个 DataFrame 将用于存储从 Excel 文件的不同工作表中读取的数据。

5.for sheet_name in xls.sheet_names:
遍历 xls 对象中存储的所有工作表名称。sheet_names 是一个包含所有工作表名称的列表。

6.sheet_df = pd.read_excel(xls, sheet_name)

对于每一个工作表名称 sheet_name,使用 read_excel 函数从 xls 对象中读取该工作表的数据,并将其存储在 sheet_df(一个 DataFrame 对象)中。


7.df = df.append(sheet_df)

将 sheet_df 中的数据追加到 df 中。这样,df 最终将包含所有工作表的数据。


8.df.to_excel(output_file_path, index=False)

将合并后的 DataFrame df 保存到指定的 output_file_path 路径。index=False 表示在保存时不包含 DataFrame 的索引。

需要注意的是,虽然这段代码能够合并多个工作表,但它有一个效率问题。在循环中,每次迭代都会将 sheet_df 追加到 df 并立即保存到 output_file_path。这意味着每次迭代都会覆盖之前的输出文件。实际上,你可能只想在循环结束后保存一次合并后的 DataFrame。正确的做法应该是将 df.to_excel(output_file_path, index=False) 语句移出循环,放在循环结束之后。这样,所有工作表的数据都会被合并到一个 DataFrame 中,然后一次性保存到输出文件。

10.数据库SQL查询

import sqlite3
def connect_to_database(database_path):
    connection = sqlite3.connect(database_path)
    return connection
def execute_query(connection, query):
    cursor = connection.cursor()
    cursor.execute(query)
    result = cursor.fetchall()
    return result

这段代码的两个函数分别用于连接数据库及执行SQL查询。以下是代码的逐行解释:

  1. 导入sqlite3模块:这行代码导入了Python的sqlite3模块,该模块提供了一个轻量级的磁盘上数据库,不需要单独的服务器进程或系统配置。
  2. connect_to_database函数:接受一个参数database_path,它代表要连接的SQLite数据库文件的路径。

3.execute_query函数:这个函数接受两个参数:connection:一个到SQLite数据库的连接对象,通常是通过connect_to_database 函数获得的。 query:一个SQL查询字符串,你希望执行这个查询来从数据库中检索数据。 

使用示例:

# 连接到数据库  
conn = connect_to_database('example.db')  
  
# 创建一个新的表  
create_table_query = '''  
CREATE TABLE IF NOT EXISTS users (  
    id INTEGER PRIMARY KEY,  
    name TEXT NOT NULL,  
    age INTEGER  
)  
'''  
execute_query(conn, create_table_query)  
  
# 插入一些数据  
insert_data_query = '''  
INSERT INTO users (name, age) VALUES (?, ?)  
'''  
execute_query(conn, insert_data_query, ('Alice', 30))  
execute_query(conn, insert_data_query, ('Bob', 25))  
  
# 查询所有数据  
select_all_query = 'SELECT * FROM users'  
users = execute_query(conn, select_all_query)  
for user in users:  
    print(user)  
  
# 关闭连接  
conn.close()

11. 系统进程查杀

import psutil
def get_running_processes():
    return [p.info for p in psutil.process_iter(['pid', 'name', 'username'])]
def kill_process_by_name(process_name):
    for p in psutil.process_iter(['pid', 'name', 'username']):
        if p.info['name'] == process_name:
            p.kill()

这段代码使用了 psutil 库来查询和管理操作系统中的进程。psutil 是一个跨平台库,能够获取系统运行状态信息,包括 CPU、内存、磁盘、网络、进程等。代码中定义了两个函数:


get_running_processes(): 这个函数返回一个包含当前运行的所有进程信息的列表。每个进程信息是一个字典,包含进程ID(pid)、进程名称(name)和进程所属用户名(username)。


kill_process_by_name(process_name): 这个函数接受一个进程名称作为参数,并尝试杀死(结束)所有与该名称匹配的进程。


这里有一些要注意的点:


psutil.process_iter() 函数用于遍历系统中的所有进程。你可以通过传递一个字段列表来限制返回的信息量,这里我们只关心进程的 pid、name 和 username。

p.info 是一个字典,包含了进程的所有信息。我们通过 p.info['name'] 来获取进程的名称。

p.kill() 方法用于结束进程。这个方法会发送一个 SIGTERM 信号给进程,告诉它应该优雅地关闭。如果进程不响应,可能会发送一个 SIGKILL 信号来强制结束它。

请注意,结束进程(特别是你没有权限结束的进程)可能会引发异常。在实际使用中,你可能需要添加适当的错误处理逻辑来处理这些异常。


此外,使用 kill_process_by_name 函数时要小心,因为它会无条件地杀死所有匹配的进程,这可能会导致不期望的行为。你可能需要添加一些额外的逻辑来确认你要结束的进程确实是你想要的,或者至少确保你不会意外地结束重要的系统进程。

12.图像尺寸调整和裁剪

from PIL import Image
def resize_image(input_path, output_path, width, height):
    image = Image.open(input_path)
    resized_image = image.resize((width, height), Image.ANTIALIAS)
    resized_image.save(output_path)
def crop_image(input_path, output_path, left, top, right, bottom):
    image = Image.open(input_path)
    cropped_image = image.crop((left, top, right, bottom))
    cropped_image.save(output_path)

函数 resize_imagecrop_image 分别用于调整图像的大小和裁剪图像。这些函数都使用了Pillow库(PIL),这是一个用于处理图像的库。

  1. resize_image 函数:
  • 参数
  • input_path:要调整大小的图像的输入路径。
  • output_path:调整大小后的图像的输出路径。
  • width:新图像的宽度。
  • height:新图像的高度。

2.功能:


打开位于 input_path 的图像。

使用 Image.ANTIALIAS 作为重采样方法,将图像的大小调整为 width 和 height。ANTIALIAS 是一种高质量的重采样滤镜,可以减少调整大小时产生的锯齿状边缘。

保存调整大小后的图像到 output_path。

2.crop_image 函数:

  • 参数
  • input_path:要裁剪的图像的输入路径。
  • output_path:裁剪后的图像的输出路径。
  • left:裁剪框的左边界。
  • top:裁剪框的上边界。
  • right:裁剪框的右边界。
  • bottom:裁剪框的下边界。
  • 功能
  • 打开位于 input_path 的图像。
  • 使用 crop 方法,根据提供的 lefttoprightbottom 边界裁剪图像。
  • 保存裁剪后的图像到 output_path


这些函数为图像处理提供了基本的功能,可以帮助你轻松地调整图像的大小或裁剪图像。

13.图片添加水印

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
def add_watermark(input_path, output_path, watermark_text):
    image = Image.open(input_path)
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype('arial.ttf', 36)
    draw.text((10, 10), watermark_text, fill=(255, 255, 255, 128), font=font)
    image.save(output_path)

函数 add_watermark 用于在给定的图像上添加水印。水印是一个文本字符串,被放置在图像的指定位置。这里使用了Python的Pillow库(PIL的一个分支)来处理图像。

以下是代码的详细解释:

  1. 导入必要的模块:
  • Image: 用于打开、处理和保存多种格式的图像文件。
  • ImageDraw: 提供了简单的图形绘制功能,用于在图像上绘制。
  • ImageFont: 用于处理字体,这样你就可以在图像上绘制文本。

2.定义 add_watermark 函数:

  • input_path: 要添加水印的原始图像的路径。
  • output_path: 添加水印后的图像的保存路径。
  • watermark_text: 要作为水印添加到图像上的文本。

3.函数内部逻辑:

  • image = Image.open(input_path): 打开位于 input_path 的图像文件。
  • draw = ImageDraw.Draw(image): 创建一个可以在上面绘制的Draw对象。
  • font = ImageFont.truetype('arial.ttf', 36): 使用TrueType或OpenType字体文件创建一个字体对象。这里使用了Arial字体,大小为36。你需要确保arial.ttf文件在你的工作目录中,或者提供正确的路径。

draw.text((10, 10), watermark_text, fill=(255, 255, 255, 128), font=font): 在图像上的位置(10, 10)绘制水印文本。文本的颜色是白色(RGB值为(255, 255, 255)),并且有一定的透明度(alpha值为128)。

  • image.save(output_path): 保存带有水印的图像到output_path指定的路径。

这个函数允许你简单地为图像添加水印,但你可能需要根据你的具体需求调整字体、大小、颜色、位置等参数。

14. 创建图像缩略图

from PIL import Image
def create_thumbnail(input_path, output_path, size=(128, 128)):
    image = Image.open(input_path)
    image.thumbnail(size)
    image.save(output_path)

这段代码定义了一个名为 create_thumbnail 的函数,用于创建一个指定大小的缩略图。这个函数使用了 Python 的 Pillow 库(PIL 的一个分支)来处理图像。以下是代码的详细解释:

1.导入 Image 类:from PIL import Image,这行代码从 PIL 库中导入了 Image 类,该类提供了打开、操作和保存图像文件的方法。

2.定义 create_thumbnail 函数,三个参数分别为:

* `input_path`: 输入图像的路径。  

* `output_path`: 缩略图图像的保存路径。  

* `size`: 缩略图的大小,默认为 `(128, 128)`(即宽度为 128 像素,高度为 128 像素)。

3.打开输入图像:image = Image.open(input_path)

这行代码使用 Image.open 方法打开位于 input_path 的图像文件,并将其存储在 image 变量中。

4.创建缩略图:image.thumbnail(size)

这行代码使用 Image 对象的 thumbnail 方法来创建缩略图。thumbnail 方法会保持图像的纵横比,同时确保图像的最大尺寸不超过 size 参数指定的宽度和高度。如果原始图像的宽度和高度都小于 size,则图像不会进行缩放。

5.保存缩略图:image.save(output_path)

这行代码将创建好的缩略图保存到 output_path 指定的路径。

6.调用示例:使用这个函数,你可以轻松地为任何图像创建一个指定大小的缩略图。

例如:create_thumbnail('path/to/input.jpg', 'path/to/output.jpg', size=(200, 200))

这行代码将创建一个最大尺寸为 200x200 像素的缩略图,并将其保存到 'path/to/output.jpg'。

15.PDF中提取文本

import PyPDF2
def extract_text_from_pdf(file_path):
    with open(file_path, 'rb') as f:
        pdf_reader = PyPDF2.PdfFileReader(f)
        text = ''
        for page_num in range(pdf_reader.numPages):
            page = pdf_reader.getPage(page_num)
            text += page.extractText()
    return text

这段代码是一个用于从PDF文件中提取文本的函数,使用了PyPDF2库。

  1. 导入PyPDF2库。
  2. 定义函数extract_text_from_pdf,它接受一个参数file_path,这是要从中提取文本的PDF文件的路径。
  3. 使用with open(file_path, 'rb') as f:打开文件,'rb'表示以二进制读模式打开文件。
  4. 创建一个PdfFileReader对象pdf_reader来读取打开的PDF文件。
  5. 初始化一个空字符串text,用于存储从PDF文件中提取的文本。
  6. 使用for循环遍历PDF文件中的每一页(range(pdf_reader.numPages)生成一个从0到pdf_reader.numPages - 1的整数序列)。
  7. 对于每一页,使用getPage(page_num)方法获取该页的对象,然后使用extractText()方法提取该页的文本,并将其添加到text字符串中。
  8. 函数最后返回存储了所有提取文本的text字符串。

请注意,PyPDF2extractText()方法可能无法完美地提取所有PDF文件中的文本,特别是对于那些包含复杂布局或特殊字体的文件。对于这种情况,可能需要使用其他更高级的PDF处理库,如PDFMinerpdfplumber

16. 合并多个PDF文件

import PyPDF2  
def merge_pdfs(input_paths, output_path):  
    pdf_writer = PyPDF2.PdfFileWriter()  
    for path in input_paths:  
        with open(path, 'rb') as f:  
            pdf_reader = PyPDF2.PdfFileReader(f)  
            for page_num in range(pdf_reader.getNumPages()):  
                page = pdf_reader.getPage(page_num)  
                pdf_writer.addPage(page)  
    with open(output_path, 'wb') as f:  
        pdf_writer.write(f)

这段代码使用PyPDF2库合并多个PDF文件。函数 merge_pdfs 接受一个包含多个PDF文件路径的列表input_paths和一个输出文件路径output_path。然后,它遍历输入文件列表,读取每个文件,并将每一页添加到一个PdfFileWriter对象中。最后,它将所有页面写入到指定的输出文件中。以下是这段代码的逐行解释:

1. import PyPDF2

导入PyPDF2库,这是一个用于处理PDF文件的Python库。


2.def merge_pdfs(input_paths, output_path):

定义一个名为merge_pdfs的函数,它接受两个参数:一个包含多个PDF文件路径的列表input_paths和一个输出文件路径output_path。


3.pdf_writer = PyPDF2.PdfFileWriter()

创建一个PdfFileWriter对象,该对象将用于写入合并后的PDF文件的内容。


4.for path in input_paths:

遍历input_paths列表中的每个文件路径。


5.with open(path, 'rb') as f:

使用with语句打开当前路径下的PDF文件,'rb'表示以二进制读模式打开文件。文件对象存储在变量f中。


6.pdf_reader = PyPDF2.PdfFileReader(f)

创建一个PdfFileReader对象来读取打开的PDF文件。


7.for page_num in range(pdf_reader.getNumPages()):

遍历当前PDF文件的每一页。getNumPages()方法返回PDF文件中的页面数量。


8.page = pdf_reader.getPage(page_num)

使用getPage方法获取当前页码对应的页面对象。


9.pdf_writer.addPage(page)

将获取到的页面对象添加到PdfFileWriter对象中,以便稍后写入到输出文件中。


10.with open(output_path, 'wb') as f:

使用with语句打开(或创建)输出文件,准备以二进制写模式写入合并后的PDF内容。


11.pdf_writer.write(f)

将PdfFileWriter对象中的所有页面写入到输出文件中。


当你调用这个函数并传入一个PDF文件路径列表和一个输出文件路径时,它将读取所有输入文件,并将它们的页面合并到一个单一的输出文件中。请确保你安装了PyPDF2库(使用pip install PyPDF2),并且输入的PDF文件都是有效的。

目录
相关文章
|
10天前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
在 Python 编程中,掌握图的深度优先遍历(DFS)和广度优先遍历(BFS)是进阶的关键。这两种算法不仅理论重要,还能解决实际问题。本文介绍了图的基本概念、邻接表表示方法,并给出了 DFS 和 BFS 的 Python 实现代码示例,帮助读者深入理解并应用这些算法。
23 2
|
19天前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器解析与应用###
【10月更文挑战第22天】 本文将带你走进Python装饰器的世界,揭示其背后的魔法。我们将一起探索装饰器的定义、工作原理、常见用法以及如何自定义装饰器,让你的代码更加简洁高效。无论你是Python新手还是有一定经验的开发者,相信这篇文章都能为你带来新的启发和收获。 ###
12 1
|
19天前
|
设计模式 测试技术 开发者
Python中的装饰器深度解析
【10月更文挑战第24天】在Python的世界中,装饰器是那些能够为函数或类“添彩”的魔法工具。本文将带你深入理解装饰器的概念、工作原理以及如何自定义装饰器,让你的代码更加优雅和高效。
|
29天前
|
XML 前端开发 数据格式
Beautiful Soup 解析html | python小知识
在数据驱动的时代,网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据,进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库,可以帮助我们轻松地解析和提取网页中的数据。本文将详细介绍 Beautiful Soup 的基础知识和常用操作,帮助初学者快速入门和精通这一强大的工具。【10月更文挑战第11天】
56 2
|
29天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
4天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
16 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
52 0
|
1月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
60 0
|
1月前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
80 0