Python学习 DAY 12

2021/10/1 22:11:10

本文主要是介绍Python学习 DAY 12,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

DAY 12

第八章 文件操作(IO技术)

一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实 际的存储,因此 python 解释器执行完数据就消失了。实际开发中,我们经常需要从外部存 储介质(硬盘、光盘、U 盘等)读取数据,或者将程序产生的数据存储到文件中,实现“持久化”保存。

文本文件和二进制文件

按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。

  1. 文本文件

文本文件存储的是普通“字符”文本,python 默认为 unicode 字符集(两个字节表示 一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件 编辑的文档不是文本文件。

  1. 二进制文件

二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件 解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等。

在这里插入图片描述

创建文件对象 open()

open()函数用于创建文件对象,基本语法格式如下:

open(文件名[,打开方式]) 

如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”。示例如下:

f = open(r"d:\b.txt","w")

打开方式有如下几种:

在这里插入图片描述

文本文件对象和二进制文件对象的创建:

如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字 符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

文本文件的写入

基本的文件写入操作

文本文件的写入一般就是三个步骤:

  1. 创建文件对象
  2. 写入数据
  3. 关闭文件对象

常用编码介绍

在操作文本文件时,经常会操作中文,这时候就经常会碰到乱码问题。为了让大家有能力解 决中文乱码问题,这里简单介绍一下各种编码之间的关系。

常用编码之间的关系如下:

在这里插入图片描述

一般项目都会使用 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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程