超级实用的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 文件中。以下是代码的逐行解释:
import pandas as pd
导入 pandas 库,并为其指定一个别名pd
。Pandas 是一个用于数据分析和处理的 Python 库。def merge_sheets(file_path, output_file_path):
定义一个名为merge_sheets
的函数,该函数接受两个参数:file_path
(要合并的 Excel 文件的路径)和output_file_path
(输出文件的路径)。xls = pd.ExcelFile(file_path)
使用 pandas 的ExcelFile
类来读取file_path
指定的 Excel 文件,并将其存储在xls
变量中。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查询。以下是代码的逐行解释:
- 导入sqlite3模块:这行代码导入了Python的
sqlite3
模块,该模块提供了一个轻量级的磁盘上数据库,不需要单独的服务器进程或系统配置。 - 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_image
和 crop_image
分别用于调整图像的大小和裁剪图像。这些函数都使用了Pillow库(PIL),这是一个用于处理图像的库。
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
方法,根据提供的left
、top
、right
和bottom
边界裁剪图像。 - 保存裁剪后的图像到
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的一个分支)来处理图像。
以下是代码的详细解释:
- 导入必要的模块:
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
库。
- 导入
PyPDF2
库。 - 定义函数
extract_text_from_pdf
,它接受一个参数file_path
,这是要从中提取文本的PDF文件的路径。 - 使用
with open(file_path, 'rb') as f:
打开文件,'rb'
表示以二进制读模式打开文件。 - 创建一个
PdfFileReader
对象pdf_reader
来读取打开的PDF文件。 - 初始化一个空字符串
text
,用于存储从PDF文件中提取的文本。 - 使用
for
循环遍历PDF文件中的每一页(range(pdf_reader.numPages)
生成一个从0到pdf_reader.numPages - 1
的整数序列)。 - 对于每一页,使用
getPage(page_num)
方法获取该页的对象,然后使用extractText()
方法提取该页的文本,并将其添加到text
字符串中。 - 函数最后返回存储了所有提取文本的
text
字符串。
请注意,PyPDF2
的extractText()
方法可能无法完美地提取所有PDF文件中的文本,特别是对于那些包含复杂布局或特殊字体的文件。对于这种情况,可能需要使用其他更高级的PDF处理库,如PDFMiner
或pdfplumber
。
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文件都是有效的。
完