Python学习 DAY 12
2021/10/1 22:11:10
本文主要是介绍Python学习 DAY 12,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
DAY 12
第八章 文件操作(IO技术)
一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实 际的存储,因此 python 解释器执行完数据就消失了。实际开发中,我们经常需要从外部存 储介质(硬盘、光盘、U 盘等)读取数据,或者将程序产生的数据存储到文件中,实现“持久化”保存。
文本文件和二进制文件
按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。
- 文本文件
文本文件存储的是普通“字符”文本,python 默认为 unicode 字符集(两个字节表示 一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件 编辑的文档不是文本文件。
- 二进制文件
二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件 解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等。
创建文件对象 open()
open()函数用于创建文件对象,基本语法格式如下:
open(文件名[,打开方式])
如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”。示例如下:
f = open(r"d:\b.txt","w")
打开方式有如下几种:
文本文件对象和二进制文件对象的创建:
如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字 符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。
文本文件的写入
基本的文件写入操作
文本文件的写入一般就是三个步骤:
- 创建文件对象
- 写入数据
- 关闭文件对象
常用编码介绍
在操作文本文件时,经常会操作中文,这时候就经常会碰到乱码问题。为了让大家有能力解 决中文乱码问题,这里简单介绍一下各种编码之间的关系。
常用编码之间的关系如下:
一般项目都会使用 UTF-8。unicode 中虽然汉字是两个字节, UTF-8 中汉字是 3 个字节。但是互联网中一个网页也包含了大量的英文字母, 这些英文字母只占用 1 个字节,整体占用空间,UTF-8 仍然优于 Unicode。
中文乱码问题
windows 操作系统默认的编码是 GBK,Linux 操作系统默认的编码是 UTF-8。当我们 用 open()时,调用的是操作系统打开的文件,默认的编码是 GBK。
可以Reload文件为GBK编码解决中文乱码问题;
也通过指定文件编码解决中文乱码问题:
f = open(r"a.txt","w",encoding="utf-8") s = "南京\n上海\n" f.write(s) f.close()
write()/writelines()写入数据
write(a):把字符串 a 写入到文件中
writelines(b):把字符串列表写入文件中,不添加换行符
f = open(r"d:\bb.txt","w",encoding="utf-8") s = ["高淇\n","高老三\n","高老四\n"] f.writelines(s) f.close()
close()关闭文件流
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用 close()方法 关闭文件对象。当调用 close()方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush() 方法),再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般结合异常机制的 finally 或者 with 关键字实现 无论何种情况都能关闭打开的文件对象。
结合异常机制 finally 确保关闭文件对象:
try: f = open(r"c.txt","w") strs = ["aa\n","bb\n","cc\n"] f.writelines(strs) except BaseException as e: print(e) finally: f.close()
with 语句(上下文管理器)
with 关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with 块,都能 确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
文本文件的读取
文件的读取一般使用如下三个方法:
1.read([size])
从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。 读取到文件末尾,会返回空字符串。
2.readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
3.readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表。
read()读取一个文件前4个字符:
with open(r"c.txt","r") as f: print(f.read(4)) 结果: aa b
测试readlines():
with open(r"c.txt","r") as f: print(f.readlines()) 结果: ['aa\n', 'bb\n', 'cc\n']
使用迭代器(每次返回一行)读取文本文件:
with open(r"c.txt","r") as f: for a in f: print(a,end="") 结果: aa bb cc
enumerate()函数和推导式生成列表_操作每行增加行号
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
示例:
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) # 下标从 1 开始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
【操作】为文本文件每一行的末尾增加行号:
with open("e.txt","r",encoding="utf-8") as f: lines = f.readlines() lines = [ line.rstrip()+" #"+str(index+1)+"\n" for index,line in enumerate(lines)] #推导式生成列表 #rstrip()去空白符 with open("e.txt","w",encoding="utf-8") as f: f.writelines(lines)
结果:
原文件:
Heiko南京 Heiko上海 北京Heiko
新文件:
Heiko南京 #1 Heiko上海 #2 北京Heiko #3
Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格)
示例:
str = " this is string example....wow!!! "; print str.rstrip(); str = "88888888this is string example....wow!!!8888888"; print str.rstrip('8');
结果:
‘this is string example…wow!!!’
‘88888888this is string example…wow!!!’
这篇关于Python学习 DAY 12的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享