python编程-第十节-文件操作与异常处理-001

第10节:文件操作与异常处理 – 让程序更”抗揍”的艺术

从菜鸟到大神的必经之路

恭喜你!

现在你已经掌握了Python编程的基本功,就像学会了骑自行车一样简单。

但要想成为真正的编程高手,我们得给你的程序装上”防撞气囊”和”记忆芯片”。

本节将带你探索:
– 📁 文件操作:让你的程序变身”数据饕餮”,轻松吞下海量数据
– 🚨 异常处理:程序界的”防弹衣”,面对各种意外都能优雅应对
– 🧩 JSON魔法:让数据在程序关闭后还能”死而复生”

想象一下,你的程序不仅能记住用户上次的操作,还能在遇到错误时优雅地”打个嗝”继续工作,而不是直接”口吐白沫”崩溃掉。

这就是本节要教你的超能力!

10.1 文件读取 – 程序界的”开卷考试”

文本文件能存储从《战争与和平》到你家猫咪的体重记录等各种信息。

学会读取文件,你的程序就能从”单机游戏”升级为”网络游戏”。

10.1.1 一口吞下整个文件

让我们从一个美味的π开始(别担心,这个π不会让你发胖)。

创建一个名为pi_digits.txt的文件,内容如下:

3.1415926535
 8979323846
 2643383279

现在,让我们用Python的”大嘴怪”模式一口吃掉整个文件:

from pathlib import Path

path = Path('pi_digits.txt')  # 给文件发个"定位器"
contents = path.read_text()   # 啊呜一口全吃掉
print(contents)               # 吐出来看看

运行这段代码,你会发现输出比原文件多了一个空行,就像吃完饭后打了个饱嗝。

这是因为read_text()方法在文件末尾偷偷加了个”饱嗝符”。

要去掉这个”饱嗝符”,我们可以用rstrip()方法给程序”拍拍背”:

contents = path.read_text().rstrip()  # 连招:读取+拍背

这种连续调用方法的技巧叫做”方法链”,就像吃薯条时连续蘸番茄酱一样自然流畅。

小贴士:文件路径的”寻宝游戏”

– 如果文件不在当前目录,你需要提供完整路径,就像给快递员详细地址一样
– VS Code用户注意:编辑器只在最近打开的文件夹中”寻宝”,记得先打开正确的文件夹
– Windows用户:路径要用反斜杠或原始字符串,比如`Path(r'C: emppi.txt')`

现在你的程序已经学会”吃东西”了,接下来我们会教它更优雅的”用餐礼仪”(逐行读取)和”食物中毒”时的应急处理(异常捕获)。敬请期待!

10.1.2 文件路径的两种打开方式:相对与绝对

想象一下你是个路痴程序员(别担心,我们都有这种时候),现在要告诉Python去哪里找文件。

这时候你有两个选择:

相对路径和绝对路径,就像用”我家隔壁的便利店”和”北京市朝阳区某某路某某号”两种方式指路一样。

相对路径:程序员的快捷方式
相对路径就像说”去我文档里的下载文件夹”——它总是从当前程序所在的位置开始算起。

比如你的程序住在D:/code/python_work,而你要找的文件在它的text_files子文件夹里,你可以这样写:

from pathlib import Path
path = Path('text_files/secret_recipe.txt')  # 就像说"去我隔壁房间拿"

但要注意!

如果你把程序搬家了,这个相对关系就会乱套——就像把”我家隔壁”这个参照物搬走了一样。

绝对路径:精确到毫米的导航
绝对路径就像GPS坐标,从系统根目录开始一路指到文件家门口:

path = Path('/Users/yourname/code/python_work/text_files/secret_recipe.txt')

这种写法虽然啰嗦,但永远准确,适合那些”我不管程序在哪,我就要这个文件!”的场合。

10.1.3 文件内容的”拆快递”艺术

拿到文件后,我们经常要像拆快递一样逐行检查内容。

Python给了我们一个超好用的拆箱工具——splitlines()方法:

from pathlib import Path

# 第一步:签收快递(读取文件)
file_content = Path('shopping_list.txt').read_text()

# 第二步:拆包装(按行分割)
items = file_content.splitlines()  # 现在每行都变成列表中的一个元素

# 第三步:逐件检查
for item in items:
    if "特价" in item:  # 发现特价商品!
        print(f"捡到宝啦:{item}")
    else:
        print(f"普通商品:{item}")

输出可能长这样:

普通商品:1. 有机苹果 ¥15
捡到宝啦:2. 特价牛排 ¥39(原价¥88)
普通商品:3. 进口牛奶 ¥12

小贴士:
– 斜杠(/)在代码里永远是对的,Pathlib会自动处理成Windows能懂的反斜杠()
– 处理大文件时,逐行读取更省内存(不过这是另一个故事了)
– 记得检查文件是否存在,否则会收获一个FileNotFoundError”惊喜”

现在你不仅知道怎么找文件,还学会了怎么”拆箱”检查内容了!

下次遇到文件操作,就像拆快递一样愉快地开始吧~

10.1.4 玩转文件内容:当代码遇上圆周率

各位代码魔法师们,今天我们要来场文件内容的”变形记”!

想象一下,你手里握着的不是普通的文本文件,而是一串神秘的数字密码——没错,就是那个让无数数学家着迷的圆周率π!

文件读取的魔法时刻

首先,让我们召唤Python的Pathlib神器,把π的数字从文件里”变”出来:

from pathlib import Path

# 施法开始!
pi_file = Path('pi_digits.txt')  # 找到藏宝图
pi_content = pi_file.read_text()  # 打开宝箱
lines = pi_content.splitlines()  # 把宝物分类放好
字符串拼接大法

现在,我们要把这些分散的数字碎片拼成完整的π项链:

pi_necklace = ''  # 准备空项链

# 开始串珠子啦!
for bead in lines:
    pi_necklace += bead  # 一颗一颗串起来

print("原始π项链:", pi_necklace)
print("项链长度:", len(pi_necklace))

运行后会看到:

3.1415926535 8979323846 2643383279
36

等等!

36颗珠子?

怎么比实际数字多?

啊哈,原来每行前面偷偷藏着空格小精灵!

空格大扫除

让我们召唤`.lstrip()`清洁工来个大扫除:

pi_necklace = ''  # 换条新项链

for bead in lines:
    pi_necklace += bead.lstrip()  # 先打扫再串珠

print("精修版π项链:", pi_necklace)
print("真实长度:", len(pi_necklace))

现在终于得到纯净版π:

3.14159265358979323846264338279
32
数据类型小贴士

⚠️ 重要警报!

Python读取文件时会把所有内容都当作字符串处理。

想玩数学游戏?

记得先”变形”:

– 整数变形术:`int()`
– 浮点数变形术:`float()`

脑洞大开时间

学会了这招,你还能:

图片[1] - python编程-第十节-文件操作与异常处理-001 - 宋马
1. 把莎士比亚全集变成一句话(虽然会很长…)
2. 拼接所有程序员的咖啡订单(”美式拿铁摩卡…”)
3. 把你的购物清单变成神秘代码

记住,文件操作就像玩积木,拼接只是开始,后面还有更多有趣的玩法等着你去发现!

现在,快去用代码创造你的字符串艺术品吧!

10.1.5 百万位圆周率的奇妙冒险

谁说数字不能玩出花样?

让我们来挑战一个包含100万位圆周率的超大文件!

虽然前面我们都在玩转三行小文件,但Python可不会因为文件变大就认怂。

想象一下,你手里有个装着百万位圆周率的文本文件(别担心,这文件不会真的有一百万页那么厚)。

Python处理这种大文件就像吃饼干一样轻松:

from pathlib import Path

# 打开我们的"数字宝箱"
pi_file = Path('pi_million_digits.txt')
# 读取所有数字
pi_content = pi_file.read_text()
# 整理成漂亮的一行
clean_pi = ''.join(line.strip() for line in pi_content.splitlines())

# 展示前50位,毕竟谁想看一百万位数字刷屏呢?
print(f"圆周率前50位:{clean_pi[:52]}...")
print(f"总位数(包括小数点):{len(clean_pi)}")

运行结果会告诉你:

3.14159265358979323846264338327950288419716939937510...
1000002

Python的内存处理能力简直就像个无底洞——只要你的电脑内存够大,它就能吞下更多数据!

不过友情提示:

要玩这个游戏,记得先下载配套的百万位圆周率文件哦。

10.1.6 你的生日藏在π里吗?

现在来玩个更有趣的游戏:

你的生日可能在圆周率的前100万位里藏着呢!

这就像在数字海洋中寻宝一样刺激。

# 接着上面的代码
birthday = input("输入你的生日吧(格式:月日年,如120372):")
if birthday in clean_pi:
    print("哇!你的生日出现在圆周率里啦!")
else:
    print("很遗憾,你的生日没在前100万位圆周率中出现...")

运行示例:

输入你的生日吧(格式:月日年,如120372):120372
哇!你的生日出现在圆周率里啦!

(偷偷告诉你,我的生日也在里面!)

这个程序证明了一点:

只要数据在手,Python就能帮你找出各种有趣的模式。

下次聚会时,这绝对是个炫技的好话题!

Python学习者的欢乐编程三部曲 🐍✨

练习 10.1:Python技能大放送

嘿,Python新手们!

让我们来玩个有趣的游戏——创建你的Python技能清单!

打开你最喜欢的代码编辑器(VSCode、PyCharm或者记事本都行,我们不挑食),新建一个名为”learning_python.txt”的文件。

现在,发挥你的创意,用”In Python you can…”开头写几行你学到的酷炫Python技能。

比如:

In Python you can make computers do your homework (almost)
In Python you can print("Hello World") and feel like a hacker
In Python you can create lists that put your grocery list to shame

保存好后,让我们写个小程序来炫耀你的成果!

第一次,我们直接读取整个文件内容;

第二次,我们把每行存到列表里再逐行展示。

双倍快乐!

练习 10.2:语言变形记

Python太简单?

想试试C语言的硬核魅力?

让我们玩个文字魔术!

用Python的replace()方法,我们可以把你的学习笔记瞬间变成C语言教程(假装是)。

就像变魔术一样:

magic = "I love Python's simplicity"
print(magic.replace('Python', 'C'))  # 见证奇迹!

现在,读取你刚才创建的”learning_python.txt”,把所有的”Python”都替换成”C”(或者其他你正在学的语言)。

看着你的学习笔记瞬间变身,是不是很有成就感?

练习 10.3:代码瘦身计划

程序员最爱的两件事:

写代码和…删代码!

让我们给你的程序来个”极简主义”改造。

原本你可能这样写:

contents = file.read()
lines = contents.splitlines()  # 这个临时变量有点多余
for line in lines:
    print(line)

现在,直接砍掉中间商赚差价:

for line in file.read().splitlines():  # 一行搞定!
    print(line)

记住:

最好的代码不是写得最多的,而是写得最聪明的!

(当然,不能聪明到6个月后自己也看不懂)

现在,去享受你的编程之旅吧!

记住,每个Python大师都是从”Hello World”开始的,而你,已经在这条路上飞奔啦! 🚀

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容