三儿的Python菜鸟历程--07--Python文件和数据格式化型(理论笔记)

第7章:Python文件和数据格式化

  • 总览
    • 7.1文件的使用
      • 7.1.1 文件的类型
      • 7.1.2 文件的打开和关闭。
      • 7.1.3 文件的读写。
  • 例行公事


总览

三儿的Python菜鸟历程--07--Python文件和数据格式化型(理论笔记)_第1张图片

7.1文件的使用

文件是存储在辅助存储器上的一组数据序列。
概念上文件是数据的集合和抽象。
文件包含文本文件和二进制文件两种类型

7.1.1 文件的类型

  • 1、文本文件一般由单一特定编码的字符组成,内容容易统一展示和阅读。
  • 2、二进制文件直接由比特0和比特1组成,没有统一的字符编码,文件内部数据的组织和文件用途有关。二进制文件由于没有统一的字符编码只能当做字节流,而不是看作字符串。
  • 3、无论文件创建为文本文件还是二进制文件,都可以以文本文件或者二进制文件形式打开,只是打开后的操作不同。
  • 4、采用文本方式读入文件,文件经过编码形式形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节流。由于存在编码,字符串中的一个字符有多个字节表示。

7.1.2 文件的打开和关闭。

Python对文件的采用统一的操作流程,即“打开----操作—关闭”。
Python通过open()函数打开一个文件,并返回一个操作这个文件的变量。
open()函数有两个参数:文件名和打开模式。
文件名可以是文件的实际名字,也可以是带完整路径的名字。
打开模式用于控制以何种方式打开文件。open()函数提供了七个基本的打开模式。

打开模式 含义
‘r’ 只读模式,如果文件不存在,返回异常FileNotFendError,默认以制度方式打开。
‘w’ 覆盖写模式,文件不存在则创建,存在则覆盖原有文件。
‘x’ 创建写模式,文件不存在则创建,存在则返回FileExistsError
‘a’ 追加写模式,文件不存在则创建,存在则在原文件最后追加内容
‘b’ 二进制文件模式
‘t’ 文本文件模式
‘+’ 与r/w/x/a一同使用,在原功能上追加读写功能。

文件使用结束后,使用close()方法关闭释放文件使用权。文件关闭后再使用文件操作方法操作该文件则会报I/O异常。

7.1.3 文件的读写。

为了演示相关操作,我先在D盘下创建了一个文本文件 san.txt,文件内容如下:

万尺高空蓝天白云,是我的生活。
和你痴心说笑慢慢吃喝,才是我的梦。
——《陪安东尼度过的漫长岁月-绿》

1、如果文件不大,那么可以一次性将文件读入,保存在程序的内部变量之中。file.read()是最常用的一次性读入文件的函数,其结果是一个字符串。

>>> f = open('D:/san.txt','r')
>>> s = f.read()
>>> print(s)
万尺高空蓝天白云,是我的生活。

和你痴心说笑慢慢吃喝,才是我的梦。

——《陪安东尼度过的漫长岁月-绿》
>>> 

2、file.readlines()也是一次性读入文件,其结果是一个列表,每个元素是文件的一行。

>>> f = open('D:/san.txt','r')
>>> ls = f.readlines()
>>> print(ls)
['万尺高空蓝天白云,是我的生活。\n', '\n', '和你痴心说笑慢慢吃喝,才是我的梦。\n', '\n', '——《陪安东尼度过的漫长岁月-绿》']
>>> 

3、文件打开以后,对文件的读写都有一个读取指针,当文件读入内容后,这个指针就向前移动一个单位,再次读取的时候,是从指针当前位置读取,而不是从头读取。

>>> f = open('D:/san.txt','r')
>>> s = f.read()
>>> print(s)
万尺高空蓝天白云,是我的生活。

和你痴心说笑慢慢吃喝,才是我的梦。

——《陪安东尼度过的漫长岁月-绿》
>>> ls = f.readlines()
>>> print(ls)
[]

因此,之前f.read()已将将指针移动到文件内容的末尾,这时候直接调用f.readlines()对文本内容进行读取时无法从当前位置读取信息,因此返回结果为空。
4、因此,我们也需要一种能够重置指针位置的方法操作文本内容的读取,这时候就需要用file.seek()方法。file.seek(0)将指针移动到内容开头.

f = open(‘D:/san.txt’,‘r’)
s = f.read()
print(s)
万尺高空蓝天白云,是我的生活。

和你痴心说笑慢慢吃喝,才是我的梦。

——《陪安东尼度过的漫长岁月-绿》

>>> f.seek(0)#将指针重置到文件开头
0
>>> ls = f.readlines()
>>> print(ls)
['万尺高空蓝天白云,是我的生活。\n', '\n', '和你痴心说笑慢慢吃喝,才是我的梦。\n', '\n', '——《陪安东尼度过的漫长岁月-绿》']

5、另外,对于文本文件,可以使用遍历循环实现对文本文件的逐行读入。这是因为文本文件可以看做是以行为元素组成的组合类型。逐行读入的方法如下:

f = open('文件路径以及名称','r')
for line in f:
	# 处理一行数据
f.close()

【提示】这里注意一点,逐行读入只存在于文本方式,二进制方式打开的数据流不存在行的概念。

6、说完了基本的读取操作,再说一下写入操作。
f.write(s)向文件中写入字符串s,每次写入后,会记录下一个写入指针。该方法可以被反复调用,在写入指针后分批写入内容,直到文件被关闭。

>>> f = open('D:/c.txt','w')
>>> f.write('万尺高空蓝天白云,是我的生活。\n')
16
>>> f.write('和你痴心说笑慢慢吃喝,才是我的梦。\n')
18
>>> f.write('——《陪安东尼度过的漫长岁月-绿》\n')
18
>>> f.close()

使用f.write(s)时,需要显式使用‘ \n’对写入的文本进行分行。如果不分行,每次写入的字符串就会连接在一起。
写入后结果如下:
三儿的Python菜鸟历程--07--Python文件和数据格式化型(理论笔记)_第2张图片
7、f.writelines(lines)直接将列表类型中的各元素连接起来写入文件中。

>>> ls = ['万尺高空蓝天白云,是我的生活。\n','和你痴心说笑慢慢吃喝,才是我的梦。\n','——《陪安东尼度过的漫长岁月-绿》']
>>> f = open('D;/d.txt','w')
Traceback (most recent call last):
  File "", line 1, in <module>
    f = open('D;/d.txt','w')
FileNotFoundError: [Errno 2] No such file or directory: 'D;/d.txt'
>>> f = open('D:/d.txt','w')
>>> f.writelines(ls)
>>> f.close()

结果如下图:
三儿的Python菜鸟历程--07--Python文件和数据格式化型(理论笔记)_第3张图片


例行公事

再次悄咪咪的佛系推一下自己的交流群。欢迎各位大佬莅临本群指导菜鸟,也欢迎各个菜鸟一起菜鸟互啄。
在这里插入图片描述

你可能感兴趣的:(Python理论笔记)