AI闪电战:代码+实战 从Python速通到深度学习|文件操作与第三方库导入总练习

想要查看本系列的其他文章请到作者主页中。
学习提示:在有别的编程基础之上,学习Python很简单,只是语法不同,所以有很多新的语法记不住也没关系,不用专门耗时间死记,实战的时候现用现查就行。
下面的介绍中是每个部分最常用的语法,基本能够应付绝大多数的情况,如果希望学习更详细的内容,可以参考每个部分给出的资料链接。

AI闪电战:代码+实战 从Python速通到深度学习|文件操作与第三方库导入总练习


综合练习:数据处理与模块化设计

目标

你需要完成一个小项目,任务是读取本地的一个数据文件(CSV 文件),进行简单的数据处理,然后将处理后的数据通过网络发送到一个服务器。为此,你将:

  1. 进行文件操作:读取 CSV 文件中的数据。
  2. 使用第三方库 requests 发送 HTTP 请求。
  3. 创建并导入自定义模块进行数据处理。

目录结构
project/
│
├── data/
│   └── sample_data.csv      # 示例数据文件
│
├── utils/
│   ├── __init__.py          # 包初始化文件
│   ├── file_operations.py   # 文件操作模块
│   └── data_processing.py   # 数据处理模块
│
├── main.py                  # 主程序
└── requirements.txt         # 依赖库

步骤1:创建数据文件

任务1:创建示例数据文件

data/ 目录下创建一个 CSV 文件 sample_data.csv,内容如下:

name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago

步骤2:实现文件操作模块

任务2:实现文件读取功能

utils/file_operations.py 文件中,编写代码实现读取 CSV 文件的功能。你将创建一个函数 read_csv,它将读取 CSV 文件并返回数据的列表形式。

# utils/file_operations.py

import csv  # 导入 Python 内置的 csv 模块,用于处理 CSV 文件

def read_csv(file_path):  # 定义一个名为 read_csv 的函数,它接受一个参数 file_path
    """
    读取 CSV 文件并返回数据列表

    参数:
    file_path: CSV 文件的路径 (告诉使用者这个参数是用来指定要读取的 CSV 文件在计算机中的位置)

    返回:
    数据列表 (说明函数执行完毕后会返回一个包含 CSV 文件数据的列表)
    """
    data = []  # 初始化一个空列表,用于存储从 CSV 文件读取的数据
    try:  # 尝试执行以下代码块,如果在执行过程中出现异常,会执行 except 部分的代码
        with open(file_path, mode='r', encoding='utf-8') as file:  # 以只读模式('r')打开指定路径的文件,并指定编码为 'utf-8',将文件对象赋值给变量 file
            reader = csv.DictReader(file)  # 使用 csv 模块的 DictReader 类创建一个读取器对象 reader,它可以将 CSV 的每一行转换为字典
            for row in reader:  # 遍历 reader 中的每一行(每一行都是一个字典)
                data.append(row)  # 将每一行(字典)添加到 data 列表中
    except FileNotFoundError:  # 如果在尝试打开文件时,发现文件不存在,就会捕获到 FileNotFoundError 这个异常
        print(f"文件 {file_path} 未找到")  # 打印出提示信息,告诉用户指定的文件未找到
    return data  # 返回存储了 CSV 文件数据的列表 data

步骤3:实现数据处理模块

任务3:处理数据

utils/data_processing.py 中,创建一个函数 process_data,将 age 小于 30 的用户筛选出来。

# utils/data_processing.py

def process_data(data):
    """
    处理数据,筛选出年龄小于30的用户
    :param data: 原始数据列表
    :return: 筛选后的数据列表
    """
    return [row for row in data if int(row['age']) < 30]

这是一个列表推导式,用于从一个名为’data’的列表中筛选出符合特定条件的元素,并创建一个新的列表

  • [row for row in data] # 表示遍历’data’列表中的每一个’row’

  • if int(row[‘age’]) < 30 # 这是筛选条件,如果’row’中’age’这个键对应的值转换为整数后小于 30

综合起来,整个表达式的作用是:从’data’列表中,筛选出’age’值转换为整数后小于 30 的那些’row’,并将这些符合条件的’row’组成一个新的列表


步骤4:主程序调用模块并发送数据

任务4:编写主程序

main.py 中,你将完成以下任务:

  1. utils.file_operations 模块中导入 read_csv,读取 sample_data.csv
  2. utils.data_processing 模块中导入 process_data,处理读取到的数据。
  3. 使用 requests 第三方库将处理后的数据发送到一个假设的服务器。
# main.py

import requests  # 导入 requests 库,用于发送 HTTP 请求
from utils.file_operations import read_csv  # 从 'utils' 文件夹中的 'file_operations' 模块导入 'read_csv' 函数
from utils.data_processing import process_data  # 从 'utils' 文件夹中的 'data_processing' 模块导入 'process_data' 函数

def send_data_to_server(data):  # 定义一个名为'send_data_to_server' 的函数,用于向服务器发送数据
    """
    将数据发送到服务器

    参数:
    data: 要发送的数据

    返回:
    服务器响应
    """
    url = 'https://httpbin.org/post'  # 定义服务器的 URL,这里是一个模拟的服务器地址
    response = requests.post(url, json=data)  # 使用 requests 库的 post 方法向指定 URL 发送包含数据的 POST 请求,并将响应存储在'response' 变量中
    return response  # 返回服务器的响应

if __name__ == '__main__':  # 当这个 Python 脚本被直接运行时,以下代码块会被执行
    # 读取 CSV 文件数据
    file_path = 'data/sample_data.csv'  # 定义要读取的 CSV 文件的路径
    data = read_csv(file_path)  # 调用 'read_csv' 函数读取指定路径的 CSV 文件,并将数据存储在 'data' 变量中

    if data:  # 如果成功读取到数据
        # 处理数据,筛选年龄小于 30 的用户
        filtered_data = process_data(data)  # 调用 'process_data' 函数处理 'data' 数据

        # 发送数据到服务器并打印服务器响应
        response = send_data_to_server(filtered_data)  # 调用'send_data_to_server' 函数将处理后的数据发送到服务器,并将响应存储在'response' 变量中
        print(f"服务器响应状态码: {response.status_code}")  # 打印服务器响应的状态码
        print(f"服务器返回内容: {response.json()}")  # 打印服务器返回的内容,使用 '.json()' 方法将响应内容解析为 JSON 格式

步骤5:安装第三方库

任务5:使用 requests

requirements.txt 文件中添加 requests 库的依赖项:

requests==2.26.0

然后运行以下命令来安装该库:

pip install -r requirements.txt

预期输出

当你运行 main.py 时,程序会:

  1. 读取 sample_data.csv 文件。
  2. 筛选出年龄小于30岁的用户(Alice 和 Bob)。
  3. 将筛选后的数据通过 POST 请求发送到服务器,并输出服务器返回的结果。

输出示例:

服务器响应状态码: 200
服务器返回内容: {'json': [{'name': 'Alice', 'age': '30', 'city': 'New York'}, {'name': 'Bob', 'age': '25', 'city': 'Los Angeles'}], ...}

1. if __name__ == '__main__' 是什么意思?

当我们编写 Python 程序时,每个文件都可以被当作一个独立的程序运行,也可以被当作模块导入到其他程序中。而
if __name__ == '__main__' 是用来区分这两种情况的关键部分。

通俗点说:

  • __name__ 是 Python 自动创建的一个变量,它记录了当前文件是怎么运行的。
    • 如果直接运行这个文件,那么 __name__ 的值就是 '__main__'
    • 如果这个文件是被作为模块导入的,那么 __name__ 就会等于文件的名字(比如 my_module)。 这句话的作用是告诉 Python:
  • 如果这个文件是直接运行的,就执行 if 下面的代码。
  • 如果这个文件是被导入的,就不执行 if 下面的代码。

举例:

# demo.py

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

if __name__ == '__main__':
    say_hello()
  • 当你直接运行 demo.py,输出: Hello!

  • 如果你在另一个文件中导入 demo.py python import demo 那么什么也不会输出,因为 if __name__ == '__main__' 中的代码不会被执行。

2. 什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据格式,它是用来在不同系统之间传递数据的。它的格式和 Python中的字典dict)非常相似,简单、易读,常用于API网络数据传输

通俗来说,JSON
就是一种特殊的文本
,用来表示结构化数据,比如用户信息、商品列表等。它可以在不同编程语言之间传递,比如从服务器获取数据时,通常数据会用
JSON 格式。

JSON 示例:

{   "name": "Alice",   "age": 25,   "city": "New York" }

在 Python 中,可以使用 json 模块把 Python 数据类型(比如字典)和 JSON 字符串互相转换:

  • json.dumps():将 Python 对象转换为 JSON 字符串。
  • json.loads():将 JSON 字符串转换为 Python 对象。

举例:


# Python 字典 -> JSON 字符串 
person = {"name": "Alice", "age": 25, "city": "New York"} 
person_json = json.dumps(person) 
print(person_json)  # 输出:
{"name": "Alice", "age": 25, "city": "New York"}

# JSON 字符串 -> Python 字典 
person_dict = json.loads(person_json) 
print(person_dict['name'])  # 输出: Alice

总结:

  • if __name__ == '__main__' 用来判断文件是直接运行还是被导入,如果是直接运行,才会执行特定代码。
  • JSON 是一种用于传输数据的格式,像 Python 字典一样,可以很容易地与网络数据进行交互。
更详细的学习链接

问题解答
由于本系列是基础教程,所以有任何问题基本上国内免费的AI模型都能回答,有任何疑问或Bug可以寻求以下免费的大模型的解答。

  • 豆包:https://www.doubao.com/chat/
  • 文心一言:https://yiyan.baidu.com/
  • 通义千问:https://tongyi.aliyun.com/qianwen/
  • 讯飞星火:https://xinghuo.xfyun.cn/desk

如果觉得有帮助的话,求 关注、收藏、点赞、星星 哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能技术小白修炼手册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值