当前位置:首页>python>驾驭AI的Python|第13课:在 Python 中操作文件

驾驭AI的Python|第13课:在 Python 中操作文件

  • 2026-09-02 20:30:35
驾驭AI的Python|第13课:在 Python 中操作文件
一、学习框架

第 13 课:在 Python 中操作文件

第 14 课:让 Python找到你的文件,用AI处理私有数据

第 15 课:多文件处理:利用AI批量处理笔记

第 16 课:以指定格式呈现 AI 处理结果

第 17 课:基于 CSV 文件利用 AI 规划国内旅行

山河书籍与朝夕,公众号:山河书籍与朝夕驾驭AI的Python|导学课:零基础面向 AI 时代的 Python 入门与实战课程,不走传统编程学习的弯路。
驾驭AI的Python
二、学习内容
欢迎来到新的一课,今天本节课我们要解锁一个非常实用的技能--在Python中操作文件。
我们之前学习了列表lists,字典dictionary这些在程序内部处理数据的方法,但现实世界中大量的信息都存在于文件里,比如日志、订单及文章等等
这节课我们就学习如何用Python读取这些文件,并结合我们强大的AI助手,对文件内容进行智能化的处理,从【读取数据】到【理解数据】。

1. 准备工作:导入必要的库

首先,我们需要导入一些辅助函数,用于与大语言模型(LLM)交互。
from helper_functions import print_llm_response, get_llm_responsefrom IPython.display import display, Markdown

2.案例1 :处理外卖订单信息 🍜

步骤 1:读取外卖订单文件

我们使用 with 语句来读取文件。

# 使用 with 语句读取文件,文件会自动关闭with open("waimai_order.txt", "r", encoding="utf-8") as f:    order_text = f.read()# 打印订单内容print(order_text)

💡 知识点

with open("文件名", "r", encoding="utf-8") as f:

  • "r"
    :表示以只读模式打开文件
  • encoding="utf-8"
    :指定文件编码为 UTF-8,避免中文乱码
  • with 语句
    :文件操作完成后会自动关闭,无需手动调用 f.close()

with 语句来读取文件的大概原理我们知道了,我们再问问AI.


代码逐行解释

with open("waimai_order.txt","r", encoding="utf-8")as f:
    order_text = f.read()

第一行解释:

with open("waimai_order.txt", "r", encoding="utf-8") as f:

  1. with
     - Python的上下文管理器关键字,用于确保文件在使用后被正确关闭
  2. open()
     - Python内置函数,用于打开文件
  3. "waimai_order.txt"
     - 要打开的文件名(这里是一个外卖订单文本文件)
  4. "r"
     - 打开模式,表示以只读方式打开文件
  5. encoding="utf-8"
     - 指定文件编码为UTF-8,确保能正确处理中文字符
  6. as f
     - 将打开的文件对象赋值给变量f

第二行解释:

order_text = f.read()

  1. f.read()
     - 调用文件对象的read()方法,读取整个文件内容
  2. order_text
     - 将读取的文件内容存储到这个变量中

Python中使用with方法打开文件的说明

在Python中,使用with语句打开文件是最推荐的方式,因为它有以下优点:

  1. 自动管理资源
    :文件会在with代码块结束后自动关闭,无需手动调用close()
  2. 异常安全
    :即使在处理文件时发生异常,文件也会被正确关闭
  3. 代码简洁
    :减少了显式关闭文件的代码

基本语法

with open(文件名, 模式, 编码)as 文件对象变量:
# 在此处处理文件
# 文件会自动在代码块结束后关闭

常见打开模式

  • "r"
     - 只读(默认)
  • "w"
     - 写入(会覆盖现有文件)
  • "a"
     - 追加
  • "r+"
     - 读写
  • "b"
     - 二进制模式(如"rb"或"wb")

示例

# 读取文件
with open("data.txt","r", encoding="utf-8")as file:
    content = file.read()

# 写入文件
with open("output.txt","w", encoding="utf-8")as file:
    file.write("Hello, World!")

# 逐行读取
with open("data.txt","r", encoding="utf-8")as file:
for line in file:
        print(line.strip())

使用with语句是Python文件操作的最佳实践,它能有效避免资源泄露和文件未关闭的问题。


练习

withopen("文件名","r",encoding="utf-8") asfile:  #打开“文件名”的文件,以只读方式,指定文件编码为UTF-8,确保能正确处理中文字符,将打开的文件对象赋值给变量                                                   #file    content = file.read()              #调用文件对象的read()方法,读取整个文件内容,将读取的文件内容存储到这个变量content中
疑问:with open("文件名","r",encoding="utf-8") as file:这个不是已经将打开的文件对象赋值给变量file了吗,为什么还需要 content = file.read() 读取变量file,又赋值给另一个变量content?只使用一个变量可不可以?

原来第一个读取的文件变量file属于文件对象,代表磁盘上的文件连接,自身不存内容,就像拿到遥控器,没按 “播放” 就看不到节目。

使用第二个变量content,调用 read()才会把文件内容读取到内存,这是 “按播放键取内容” 的关键一步。


步骤 2:使用 LLM 提取订单关键信息

现在我们构造一个提示语,让 LLM 帮我们提取订单中的关键信息。

然后通过 get_llm_response 和 display(Markdown()) 获取带有项目符号的回复。

# 构造提示语prompt = f"""请从以下外卖订单中提取关键信息,并以项目符号形式列出:- 订单编号- 商家名称- 收货地址- 菜品清单- 实付金额- 预计送达时间订单内容:{order_text}"""# 获取 LLM 响应order_summary = get_llm_response(prompt)  #后台处理get,不打印,将内容赋值给变量order_summary# 以 Markdown 格式显示display(Markdown(order_summary))
  • 结合我们熟悉的 f-string 用法,大括号 {} 内引用的变量,其值即为之前打开文件的内容。
  • 运行 get_llm_response 函数以获取带有项目符号的回复。

步骤 3:生成订单确认短信

让我们尝试让 LLM 根据订单信息生成一条简洁的确认短信。
# 构造生成短信的提示语sms_prompt = f"""根据以下外卖订单信息,生成一条简洁的订单确认短信(不超过70字):{order_text}"""# 获取并打印短信内容sms_text = get_llm_response(sms_prompt)print(sms_text)

案例 2:分析旅行日记 ✈️

在这个案例中,我们将读取一篇旅行日记,并提取旅行城市、景点和美食信息。

步骤 1:读取旅行日记文件

# 读取旅行日记withopen("travel_diary.txt", "r", encoding="utf-8") as f:    diary_text = f.read()# 以 Markdown 格式显示display(Markdown(diary_text))

步骤 2:提取旅行城市和主要景点

# 提取城市和景点travel_prompt = f"""请从以下旅行日记中提取:1. 所有去过的城市2. 每个城市的主要景点或活动以表格形式呈现。旅行日记:{diary_text}"""travel_summary = get_llm_response(travel_prompt)display(Markdown(travel_summary))

步骤 3:提取品尝过的美食

# 提取美食清单food_prompt = f"""请从以下旅行日记中列出所有提到的美食,按城市分类:{diary_text}"""food_list = get_llm_response(food_prompt)display(Markdown(food_list))

三、练习
现在轮到你来实践了!请完成以下练习:

案例 :处理快递物流信息 📦

在这个案例中,我们将读取快递物流信息,并提取物流轨迹。

步骤 1:读取快递信息文件

# 读取快递信息并打印出来# 信息文件名:kuaidi_info.txtwith open("kuaidi_info.txt","r",encoding="utf-8") as f:    kuaidi_text =f.read() print(kuaidi_text)

步骤 2:提取物流轨迹时间线

# 构造提示词利用AI提取物流轨迹,按时间顺序列出logistics_prompt = """请从以下快递信息中提取物流轨迹,按时间顺序列出:{kuaidi_text}"""# 显示物流轨迹logistics_timeline = get_llm_response(logistics_prompt)display(Markdown(logistics_timeline))

步骤 3:判断快递当前状态

# 判断快递状态status_prompt = """根据快递信息判断快递状态{kuaidi_text}"""delivery_status = get_llm_response(status_prompt)print(f"📍 快递状态:{delivery_status}")

🎉 恭喜你完成了本课学习!

通过这些案例,你已经掌握了:

  • ✅ 使用 with 语句安全地读取文件
  • ✅ 指定 UTF-8 编码处理中文文件
  • ✅ 结合 LLM 进行智能化文本分析
  • ✅ 构造有效的提示语提取关键信息

继续加油,探索更多 Python 的强大功能!🚀

四、附件

waimai_order.txt

订单编号:20260103001下单时间:2026年1月3日 12:15亲爱的用户,您好!感谢您使用美团外卖!您的订单已确认,骑手正在为您配送中。【订单详情】商家:川香麻辣烫(人民路店)收货地址:北京市海淀区中关村大街1号,科技大厦A座1208室联系电话:138****5678【菜品清单】1. 麻辣烫套餐(大份) x1   - 土豆片、金针菇、豆腐皮、娃娃菜、牛肉丸   - 辣度:中辣   - 价格:¥32.002. 酸辣粉 x1   - 辣度:微辣   - 价格:¥15.003. 冰糖雪梨 x2   - 价格:¥8.00【费用明细】商品总价:¥55.00配送费:¥5.00包装费:¥2.00满减优惠:-¥10.00实付金额:¥52.00【配送信息】预计送达时间:12:45骑手姓名:张师傅骑手电话:139****1234温馨提示:如有问题请及时联系骑手或客服,祝您用餐愉快!美团外卖2026年1月3日

travel_diary.txt

主题:我活著回来了!!(以及为什么没人警告我“微辣”是什么意思??)嘿,兄弟!听你的话去中国旅行,是我这辈子做过最疯狂、也是最“废腿”的决定。我现在人虽然回到了加州,但我的胃大概还留在成都。你之前说“中国很好玩”,但你没告诉我是这种玩命法:**第一站:北京**长城太疯狂了,你说去爬长城是“散步”,但这简直是“斯巴达勇士赛”!我在上面走了两万步,感觉膝盖已经不是我自己的了。故宫大得离谱,我差点在里面迷路出不来。不过在王府井吃的那个北京烤鸭确实上帝级别的,那鸭皮脆得像薯片一样,为了它,我原谅了我的腿痛。**第二站:西安**兵马俑看着确实很酷,成千上万个泥塑士兵盯着你看,有点像《木乃伊》电影现场。但在回民街吃羊肉泡馍时我崩溃了——老板居然让我自己把馍掰碎?我掰了整整半小时!手指头都抽筋了!好在肉夹馍完全就是“中式超级汉堡”,这个我给满分。**第三站:成都(这里我要重点投诉!)**这就是你说的“美食天堂”?这分明是“辣椒地狱”!在锦里吃火锅和串串时,服务员跟我说“微辣(Little Spicy)”,我信了。结果?我感觉嘴里含了一颗手雷!我在宽窄巷子喝茶时舌头还在跳舞。唯一治愈我的是那几只大熊猫,它们每天只负责吃和睡,那是我想过的生活。**第四站:桂林**终于不那么硬核了。漓江和竹筏漂流确实像你们中国的水墨画,美得不真实。但我还是不理解,为什么竹筏就是几根管子绑在一起?虽然有点慌,但在水上漂着确实比走路强。**第五站:上海**这里简直就是《赛博朋克 2077》!外滩和东方明珠塔的夜景比纽约还要科幻。南京路步行街的人多到我以为全人类都在这儿逛街。最搞笑的是我飞了半个地球,最后还是去了迪士尼乐园,但那里的烤火鸡腿居然比美国的好吃,这也太奇怪了。总之,兄弟,谢谢你的推荐。中国太大了,太快了,也太辣了。我现在需要睡整整一周来恢复元气。下次见面如果你请我吃火锅,我要吃清汤的,**必须是清汤**!你的美国朋友,Mike2026年1月3日

kuaidi_info.txt

【顺丰速运】物流信息通知快递单号:SF1234567890寄件时间:2026年1月1日 09:30尊敬的顾客:您的快递包裹正在配送中,请注意查收!【寄件信息】寄件人:杭州淘宝科技有限公司寄件地址:浙江省杭州市余杭区文一西路969号联系电话:0571-88158888【收件信息】收件人:李明收件地址:上海市浦东新区陆家嘴环路1000号,恒生银行大厦25楼联系电话:186****9999【包裹信息】物品名称:电子产品(笔记本电脑)重量:2.5kg包裹尺寸:40cm x 30cm x 8cm保价金额:¥8000.00【物流轨迹】2026-01-01 09:30 【杭州市余杭区】已揽收2026-01-01 14:20 【杭州转运中心】已发出2026-01-01 22:15 【上海转运中心】已到达2026-01-02 08:30 【上海浦东新区】派送中2026-01-02 10:45 【上海浦东新区】已签收,签收人:本人温馨提示:1. 请验收包裹完好后再签收2. 如有疑问请拨打客服热线:953383. 感谢您使用顺丰速运!顺丰速运客服热线:95338官方网站:www.sf-express.com

最新文章

随机文章