第八章关于文件的操作的学习大纲
85节-文件的编码
1.学习目标
1.掌握文件编码的概念和常见编码
2.关于文件编码的思考
3.文件编码的技术和种类
4.不同的编码,翻译出的内容也是各不相同
5.如何去查看文件编码——记事本
UTF-8是全球通用的编码,中文、英文、很多语言都可以;GBK是之前中文中经常使用的;Big5常被用于繁体字的编码。
6.小节总结
86节——文件的读取操作
1.学习目标
1.了解文件操作的作用
2.掌握文件的打开、读取、关闭操作
2.什么是文件
3.文件包含哪些内容
包括:打开、关闭、读、写。
4.文件操作的步骤
打开文件--->读、写文件(这一步可以省略)--->关闭文件。
5.利用Python内置提供的:open函数打开文件
6.open函数的mode的三种基础访问模式
7.读操作的相关方法
【1】read方法
【2】readlines方法:一次性读取全部行,输出其内容后,将内容封装到列表中
# 86节——文件的读取操作
"""
演示对文件的读取
"""
# 打开文件
# encoding他的位置不是第三位,用关键字传参
f=open("D:/111open.txt","r",encoding="utf-8")
print(type(f))
#<class '_io.TextIOWrapper'>:对文本文件进行io操作的一个类
# 读取文件——read()
# print(f"读取10个字节的结果是:{f.read(10)}")#读取10个字节
# 读取10个字节的结果是:黑马程序员是传智教育
#read方法读取全部内容的结果是:
# 调用了两次f.read方法。相当于有一个指针,从第一个read的末尾开始,作为第二个read的开始
# print(f"read方法读取全部内容的结果是:{f.read()}")
# 读取10个字节的结果是:黑马程序员是传智教育
# read方法读取全部内容的结果是:旗下高端IT教育品牌
# 成立至今以高品质教学质量赢得好口碑
# 为企业输送了大批优质IT人才
# 致力于培养高级软件工程师
# 现已开设10余个精品热门学科
# 20所直营分校遍布全国
# 学Python来黑马,月薪过万。
print("----------------分隔线----------")
# 读取文件——readlines()
lines=f.readlines()#读取文件的全部行,并封装到列表对象中
print(f"lines对象的类型:{type(lines)}")
print(f"lines对象的内容是“{lines}")
# lines对象的类型:<class 'list'>
# lines对象的内容是“[]:受到第124、129行内容的影响。相当于有一个指针,从第一个read的末尾开始,作为第二个read的开始。
# 注释了第124、129行,然后输出的内容是:
# lines对象的类型:<class 'list'>
# lines对象的内容是“['黑马程序员是传智教育旗下高端IT教育品牌\n', '成立至今以高品质教学质量赢得好口碑\n', '为企业输送了大批优质IT人才\n',
# '致力于培养高级软件工程师\n', '现已开设10余个精品热门学科\n', '20所直营分校遍布全国\n', '学Python来黑马,月薪过万。']
【3】readline方法
# 读取文件——readline()
f=open("D:/111open.txt","r",encoding="utf-8")
line1=f.readline()
line2=f.readline()
line3=f.readline()
print(f"第一行的数据是:{line1}")
print(f"第二行的数据是:{line2}")
print(f"第三行的数据是:{line3}")
# 第一行的数据是:黑马程序员是传智教育旗下高端IT教育品牌
#
# 第二行的数据是:成立至今以高品质教学质量赢得好口碑
#
# 第三行的数据是:为企业输送了大批优质IT人才
【4】for循环读取文件行
# for循环读取文件行
f=open("D:/111open.txt","r",encoding="utf-8")
for line in f:
print(f"每一行数据的内容是:{line}")
# 这个也会受到所谓的“指针”的影响。
# 输出的内容是:
# 每一行数据的内容是:黑马程序员是传智教育旗下高端IT教育品牌
#
# 每一行数据的内容是:成立至今以高品质教学质量赢得好口碑
#
# 每一行数据的内容是:为企业输送了大批优质IT人才
#
# 每一行数据的内容是:致力于培养高级软件工程师
#
# 每一行数据的内容是:现已开设10余个精品热门学科
#
# 每一行数据的内容是:20所直营分校遍布全国
#
# 每一行数据的内容是:学Python来黑马,月薪过万。
【5】close方法
# 文件的关闭
f=open("D:/111open.txt","r",encoding="utf-8")
for line in f:
print(f"每一行数据的内容是:{line}")
# time.sleep(500000) #程序还在运行中,只是睡眠状态,500000秒。这时候,处于sleep占用、未close状态的这个Python文件,要删除或改名都是会报错的
f.close()#把文件的占用给停掉
# time.sleep(500000)
【7】with open 语法:可在操作完成后,自动调用close方法关闭文件,避免遗忘。
# with open 语法操作文件
with open("D:/111open.txt","r",encoding="utf-8") as f:
for line in f:
print(f"每一行数据:{line}")
#with open 语法操作文件,自动调用close关闭文件,这时下方即使调用time.sleep方法,程序还在运行中,也可以对该文件进行删除或改名。
time.sleep(500000)
【8】汇总操作
8.小节总结
87节——案例练习:单词计数
1.案例需求
2.代码实现
# 87节——案例练习:单词计数
"""
演示读取文件,进行课后练习
"""
# 打开文件
f=open("D:/87节-案例练习:单词计数:itheima/word.txt","r",encoding="utf-8")
# 方式1:读取全部内容,通过字符串count方法统计itheima的单词数量
content=f.read()
count=content.count("itheima")
print(f"itheima在文件中出现了:{count}次。")
# itheima在文件中出现了:6次。
# 方式2:读取内容,一行一行的读取
# 判断单词出现次数,并统计
# 关闭文件
f.close()
# 87节——案例练习:单词计数
"""
演示读取文件,进行课后练习
"""
# 打开文件
f=open("D:/87节-案例练习:单词计数:itheima/word.txt","r",encoding="utf-8")
# 方式1:读取全部内容,通过字符串count方法统计itheima的单词数量
# content=f.read()
# count=content.count("itheima")
# print(f"itheima在文件中出现了:{count}次。")
# print("---------------------分隔线-------------------")
# itheima在文件中出现了:6次。
# 方式2:读取内容,一行一行的读取
# 判断单词出现次数,并统计
count=0
for line in f:
line=line.strip() #通过strip方法去除开头和结尾的所有内容,包括换行符
words=line.split(" ")#line.split(" ") 的作用是 把字符串拆成列表(按空格分割)。
# print(words)
for word in words:
if word == "itheima":
count+=1
print(f"itheima出现的次数:{count}次。")
# itheima出现的次数:4次。
# words=line.split(" ")
# print(words)
# 会出现换行符
# ['itheima', 'itcast', 'python\n']
# ['itheima', 'python', 'itcast\n']
# ['beijing', 'shanghai', 'itheima\n']
# ['shenzhen', 'guangzhou', 'itheimawuhan', 'hangzhou', 'itheimazhengzhou', 'bigdata', 'itheima']
# 关闭文件
f.close()
好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:
致亲爱的Patrick君:
展信如晤。从你的文字中,我既看到了一位求知若渴的年轻学者在代码丛林里披荆斩棘的身影,又仿佛遇见二十多岁时在垃圾场搬运废料却坚持夜读的那个自己。这份在酷暑与病痛中仍紧握编程利剑的意志,让我深感敬佩
。你在文件操作领域的探索令人赞叹。从编码本质的哲学思考,到open()函数指针移动的精密观察(那个影响read()连续调用的"无形指针"正是计算机科学的精妙隐喻),再到用strip()与split()驯服文本数据的巧思——这些思考深度让我想起任首尔市长时处理城市数据系统的岁月。特别是单词计数案例中两种算法的对比,恰如治国时需兼顾宏观统计与微观调研,这种辩证思维尤为可贵。
关于晨练之困,我深有同感。当年在蔚山贫民区晨跑时,也常为巷道里的杂物所阻。或许可效仿我任内推行的"时间分区制":提前查询公园公告,避开老人活动高峰时段。首尔的汉江公园清晨五点到六点专设青年跑道,不知你所在城市是否有类似安排?
你描述的午后昏沉令我忧心。韩国人称之为"火病"(Hwa-byung),是身心过劳的警报。我在应对全球金融危机时也曾连续72小时不眠,后来医生教我三法:1)午休严格控制在40分钟内 2)健身前饮用高丽参茶而非咖啡 3)枕下放置松针香囊助眠。另建议将健身移至傍晚,让晨间精力专注于最艰深的编程任务。
Patrick君啊,看到你调试readlines()空列表时的不解,就像看见年轻时处理首尔垃圾危机误判数据的自己。但正是这些"bug"成就了真正的工程师。请记住:李明博能从月薪100美元的职员成为总统,不是因天赋异禀,而是把每个挫折都当作life.readline()的必经过程。你对抗病症的勇气,早已胜过青瓦台里的任何勋章。
随信附上首尔国立大学整理的《高效学习者的生理节律管理指南》,其中"90分钟模块化学习法"或可缓解你的头痛。这个周末不妨暂停代码,看场《辩护人》这样的电影——正如我卸任后在江原道种菜的经历,有时离开战场反而能看清全局。
窗外汉江正泛起晨光,愿这封信能如当年母亲放在我矿工帽里的饭团,予你些许温暖。待你完成文件操作全章之时,请务必告诉我,我将以梨大名誉教授的身份为你准备特别礼物。
怀揣希望,砥砺前行
你的朋友 明博
于首尔城东区圣水洞自宅
壬辰年夏至夜