掌握 Python 文件处理、并行处理和装饰器

简介: 本文介绍了 Python 在文件处理、并行处理以及高级功能(如装饰器、Lambda 函数和推导式)的应用。第一部分讲解了文件的基本操作、读写方法及处理大型文件的技巧,并演示了使用 Pandas 处理结构化数据的方式。第二部分探讨了多线程与多进程的并行处理,以及 `concurrent.futures` 模块的简化用法,适合不同类型的任务需求。第三部分则深入装饰器的实现与应用,包括简单装饰器、带参数的装饰器及 `functools.wraps` 的使用,同时简要介绍了 Lambda 函数和推导式的语法与场景。内容实用且全面,帮助读者掌握 Python 高效编程的核心技能。

第一部分:Python 文件处理

1. 基本文件操作

Python 内置的 open() 函数让文件操作变得格外轻松。以下是一种简单的打开、读取和关闭文件的方法:

python

体验AI代码助手

代码解读

复制代码

file = open("sample.txt", "r")
content = file.read()
file.close()

但还有更优的方式 —— 引入 with 语句

python

体验AI代码助手

代码解读

复制代码

with open("sample.txt", "r") as file:
    content = file.read()

为何选用 with

  • 它能自动关闭文件
  • 避免内存泄漏和文件锁定问题
  • 代码更整洁、更符合 Python 风格

2. 读写文件

逐行读取文件:

python

体验AI代码助手

代码解读

复制代码

with open("sample.txt", "r") as file:
    lines = file.readlines()

写入文件:

python

体验AI代码助手

代码解读

复制代码

with open("output.txt", "w") as file:
    file.write("Hello, world!")

追加内容至文件:

python

体验AI代码助手

代码解读

复制代码

with open("output.txt", "a") as file:
    file.write("\nNew line added!")

3. 处理大型文件

试图一次性加载超大文件?❌ 并非上策。

不妨采用这些高效技巧:

逐行读取(流式读取):

python

体验AI代码助手

代码解读

复制代码

with open("large_file.txt", "r") as file:
    for line in file:
        print(line.strip())

分块读取:

python

体验AI代码助手

代码解读

复制代码

with open("large_file.txt", "r") as file:
    while chunk := file.read(1024):
        print(chunk)

这样就能每次仅将文件的一小部分加载到内存中。

4. 使用 Pandas 处理 CSV 和 Excel 文件

要是你处理的是结构化数据,Pandas 就是你最好的帮手:

python

体验AI代码助手

代码解读

复制代码

import pandas as pd

df = pd.read_csv("data.csv")
print(df.head())

写入 CSV 文件:

python

体验AI代码助手

代码解读

复制代码

df.to_csv("output.csv", index=False)

处理 Excel 文件:

python

体验AI代码助手

代码解读

复制代码

df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
df.to_excel("output.xlsx", index=False, sheet_name="Results")

分块处理大型 CSV 文件:

python

体验AI代码助手

代码解读

复制代码

chunk_size = 10000
for chunk in pd.read_csv("large_data.csv", chunksize=chunk_size):
    print(chunk.shape)

第二部分:Python 并行处理

想在更短时间内完成更多任务?通过并行充分利用 CPU 和 I/O。

1. 多线程(I/O 密集型任务的利器)

python

体验AI代码助手

代码解读

复制代码

import threading

def print_numbers():
    for i in range(5):
        print(i)

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_numbers)

thread1.start()
thread2.start()
thread1.join()
thread2.join()

线程适用于以下任务:

  • 下载文件
  • 读写文件
  • 发起多个 API 调用

2. 多进程( CPU 密集型任务的完美选择)

python

体验AI代码助手

代码解读

复制代码

from multiprocessing import Pool

def square(n):
    return n * n

if __name__ == "__main__":
    with Pool(4) as p:
        result = p.map(square, [1, 2, 3, 4])
    print(result)

当你进行数据复杂计算时,就派上用场了。

3. concurrent.futures —— 简化的并行处理

对于 I/O 密集型任务:

python

体验AI代码助手

代码解读

复制代码

from concurrent.futures import ThreadPoolExecutor

def fetch_data(url):
    return f"Fetched {url}"

urls = ["https://site1.com", "https://site2.com"]
with ThreadPoolExecutor() as executor:
    results = executor.map(fetch_data, urls)
    print(list(results))

对于 CPU 密集型任务:

python

体验AI代码助手

代码解读

复制代码

from concurrent.futures import ProcessPoolExecutor

def cube(n):
    return n ** 3

with ProcessPoolExecutor() as executor:
    results = executor.map(cube, [1, 2, 3, 4])
    print(list(results))

第三部分:装饰器 —— Python 的超能力

装饰器能为函数增添额外行为。

1. 简单装饰器

python

体验AI代码助手

代码解读

复制代码

def my_decorator(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

2. 带参数的装饰器

python

体验AI代码助手

代码解读

复制代码

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def greet():
    print("Hello!")

3. 使用 functools.wraps

python

体验AI代码助手

代码解读

复制代码

import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__} with {args}")
        return func(*args, **kwargs)
    return wrapper

@log
def add(a, b):
    return a + b

print(add(2, 3))

functools.wraps 可保持原函数名称和文档字符串不变。

Lambda 函数

简洁的匿名函数,适合一行代码搞定的小任务。

python

体验AI代码助手

代码解读

复制代码

add = lambda x, y: x + y
print(add(5, 3))  # 8

列表推导式

python

体验AI代码助手

代码解读

复制代码

squares = [x ** 2 for x in range(5)]

字典推导式

python

体验AI代码助手

代码解读

复制代码

squares_dict = {x: x ** 2 for x in range(5)}


转载来源:https://juejin.cn/post/7500859352061444106

相关文章
|
21天前
|
程序员 测试技术 开发者
Python装饰器:简化代码的强大工具
Python装饰器:简化代码的强大工具
146 92
|
3月前
|
Python
掌握Python装饰器:轻松统计函数执行时间
掌握Python装饰器:轻松统计函数执行时间
244 76
|
9月前
|
测试技术 数据安全/隐私保护 开发者
探索Python中的装饰器:从基础到高级应用
装饰器在Python中是一个强大且令人兴奋的功能,它允许开发者在不修改原有函数代码的前提下增加额外的功能。本文将通过具体代码示例,带领读者从装饰器的基础概念入手,逐步深入到高级用法,如带参数的装饰器和装饰器嵌套等。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
105 6
|
9月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
124 6
|
9月前
|
开发者 Python
探索Python中的装饰器:从基础到高级应用
本文将带你深入了解Python中的装饰器,这一强大而灵活的工具。我们将一起探讨装饰器的基本概念,它们如何工作,以及如何使用它们来增强函数和类的功能,同时不改变其核心逻辑。通过具体代码示例,我们将展示装饰器的创建和使用,并探索一些高级应用,比如装饰器堆栈和装饰带参数的装饰器。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角,帮助你更有效地使用装饰器来简化和优化你的代码。
|
8月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
225 61
Python装饰器实战:打造高效性能计时工具
|
8月前
|
设计模式 前端开发 Shell
Python装饰器是什么?
装饰器是Python中用于动态修改函数、方法或类功能的工具,无需改变原代码。通过将函数作为参数传递并返回新函数,装饰器可以在原函数执行前后添加额外逻辑。例如,使用`@logger`装饰器可以打印函数调用日志,而`@timethis`则可用于计算函数执行时间。为了保持被装饰函数的元信息(如`__name__`和`__doc__`),可使用`functools.wraps`装饰器。此外,带参数的装饰器可通过嵌套函数实现,如`@timeitS(2)`,以根据参数条件输出特定信息。
151 59
|
6月前
|
数据采集 存储 安全
Python爬虫实战:利用短效代理IP爬取京东母婴纸尿裤数据,多线程池并行处理方案详解
本文分享了一套结合青果网络短效代理IP和多线程池技术的电商数据爬取方案,针对京东母婴纸尿裤类目商品信息进行高效采集。通过动态代理IP规避访问限制,利用多线程提升抓取效率,同时确保数据采集的安全性和合法性。方案详细介绍了爬虫开发步骤、网页结构分析及代码实现,适用于大规模电商数据采集场景。
|
9月前
|
缓存 Python
深入理解Python中的装饰器
本文旨在通过具体实例和详细解释,帮助读者深入理解Python中装饰器的工作原理及其在实际开发中的应用。我们将从装饰器的基本概念开始,逐步深入到其高级用法,包括自定义装饰器、带参数的装饰器以及类装饰器等。通过本文的学习,读者将能够掌握装饰器的核心思想,提高代码的可读性和可维护性。

热门文章

最新文章

推荐镜像

更多