第 13 课:在 Python 中操作文件
第 14 课:让 Python找到你的文件,用AI处理私有数据
第 15 课:多文件处理:利用AI批量处理笔记
第 16 课:以指定格式呈现 AI 处理结果
第 17 课:基于 CSV 文件利用 AI 规划国内旅行
山河书籍与朝夕,公众号:山河书籍与朝夕驾驭AI的Python|导学课:零基础面向 AI 时代的 Python 入门与实战课程,不走传统编程学习的弯路。





from helper_functions import print_llm_response, get_llm_responsefrom IPython.display import display, Markdown
我们使用 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:
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:
withopen()"waimai_order.txt""r"encoding="utf-8"as fforder_text = f.read()
f.read()read()方法,读取整个文件内容order_text在Python中,使用with语句打开文件是最推荐的方式,因为它有以下优点:
with代码块结束后自动关闭,无需手动调用close()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,确保能正确处理中文字符,将打开的文件对象赋值给变量#filecontent = file.read() #调用文件对象的read()方法,读取整个文件内容,将读取的文件内容存储到这个变量content中

原来第一个读取的文件变量file属于文件对象,代表磁盘上的文件连接,自身不存内容,就像拿到遥控器,没按 “播放” 就看不到节目。
使用第二个变量content,调用 read()才会把文件内容读取到内存,这是 “按播放键取内容” 的关键一步。
现在我们构造一个提示语,让 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))
{} 内引用的变量,其值即为之前打开文件的内容。get_llm_response 函数以获取带有项目符号的回复。
# 构造生成短信的提示语sms_prompt = f"""根据以下外卖订单信息,生成一条简洁的订单确认短信(不超过70字):{order_text}"""# 获取并打印短信内容sms_text = get_llm_response(sms_prompt)print(sms_text)

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

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

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

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

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

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

通过这些案例,你已经掌握了:
with 语句安全地读取文件继续加油,探索更多 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