活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
学习日记
目录
一、前言
在变量、序列和对象中储存的数据是暂时的,程序结束后就会丢失。为了能够永久的储存程序中的数据,需要将程序中的数据保存到磁盘文件中。Python提供内置文件的对象,还提供了对文件和目录进行操作的内置模块。通过这些技术可以很方便的将数据保存到文件(文本文件等),以达到永久储存数据的目的。
本章节将分为“基本文件操作”、“目录操作”、“高级文件操作”三个模块讲解。
二、基本文件操作
Python中,内置文件(file)对象。在使用文件对象时,首先需要通过内置的open()方法创建一个文件对象,然后通过该对象提供的方法进行一些基本文件操作。例如write()方法写入、close()方法关闭文件等。
1、创建和打开文件
创建或打开指定文件并创建文件对象可以使用open()方法,基本语法如下。
file = open(filename[,mode[,buffering]])
file :被创建的文本对象
filename:要创建或打开文件的名称,需要使用单引号或双引号括起来。如果要打开文件和当前文件在同一目录下,那么直接写文件名即可,否则则需要指定完整路径。
mode:可选参数,用于指定文件的打开模式。参数表如下。
mode参数的参数值
r | 以只读模式打开文件。文件的指针将会放在文件的开头 |
rb | 以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等 |
r+ | 打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖) |
rb+ | 以二进制格式打开文件,并且采用读写模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等 |
w | 以只写模式打开文件 |
wb | 以二进制格式打开文件,并且采用只写模式。一般用于非文本文件,如图片、声音等 |
w+ | 打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限 |
wb+ | 以二进制格式打开文件,并且采用读写模式。一般用于非文本文件,如图片、声音等 |
a | 以追加模式打开一个文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入 |
ab | 以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入 |
a+ | 以读写模式打开文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写 |
ab+ | 以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写 |
buffering:可选参数,用于指定读写文件的缓冲模式,如果值为0,则表示不缓存;如果值为1,则表示缓存;如果值大于1,则表示缓冲区的大小,默认为缓冲模式。
例
创建并打开记录蚂蚁庄园动态的文件。
print("\n","="*10,"蚂蚁庄园动态","="*10) file = open('message.txt','w') # 创建或打开保存蚂蚁庄园动态信息的文件 print("\n 即将显示……\n") # 以下为关闭文件对象的代码 # file.close() # 关闭文件对象
2、关闭文件
打开文件后要及时关闭,以免造成对文件不必要的破坏,关闭文件时可以使用文件对象的close()方法实现。
file.close()
file :打开的文件对象
#close()方法先刷新缓冲区中还没有写入的信息,然后关闭文件,这样可以将没有写入文件中的内容写入文件中。在关闭文件后,就不能进行写入操作了。
3、打开文件时使用with语句
打开文件后要及时关闭,如果忘记关闭,可能带来意想不到的问题。另外,如果在文件打开时出现了异常,将导致文件不能关闭。为了更好避免这些问题,可以使用with语句,从而在文件处理时,无论是否出现异常都能保证with语句执行完毕后关闭已打开的文件。
with expression as target:
with-body
expression: 用于指定一个表达式,可以是打开文件的open()函数。
target:用于指定一个变量,并且将expression的结果保存到该变量中。
with-body:用于指定with语句体,其中可以是执行with语句后相关的一些操作语句。如果不想执行任何语句,可以直接使用pass语句代替。
例
上面的例子可以改写为
print("\n","="*10,"蚂蚁庄园动态","="*10)
with open('message.txt','w')as file: # 创建或打开保存蚂蚁庄园动态信息的文件
pass
print("\n 即将显示……\n")
4、写入文件内容
使用write()方法
file.write(string)
file:打开的文件对象。
string:要写入的字符串。
例
向蚂蚁庄园的动态文件写入一条信息。
print("\n","="*10,"蚂蚁庄园动态","="*10) file = open('message.txt','w') # 创建或打开保存蚂蚁庄园动态信息的文件 # 写入一条动态信息 file.write("你使用了1张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。\n") print("\n 写入了一条动态……\n") file.close() # 关闭文件对象
在写入文件后一定要关闭文件,不然写入的内容不会被保存到文件中。
5、读取文件
读取指定字符
file.read([size])
r(只读)或者r+(读写)
file:打开的文件对象。
size:可选参数,用于指定要读取的字符个数,如果省略则一次性读取所有。
部分读取
想要读取部分内容,可以先使用文件对象的seek()方法将文件的指针移动到新位置,然后应用read(size)方法读取。seek()方法的基本语法如下
file.seek(offset[,whence])
file:已经打开的文件对象。
offset:用于指定移动的字符个数,其具体位置与whence有关。
whence:用于指定从什么地方开始计算。如果值为0,表示从头开始计算,值为1,表示从当前位置开始计算,值为2,表示从文件尾开始计算。
PS:
在使用seek()方法时,offset的值按一个汉字占两个字符来算,英文字符和数字按占一个字符来算的。
例
在蚂蚁庄园的动态栏目中记录着庄园的新鲜事。现在想要显示庄园里的动态信息。
print("\n","="*25,"蚂蚁庄园动态","="*25,"\n") with open('message.txt','r') as file: # 打开保存蚂蚁庄园动态信息的文件 message = file.read() # 读取全部动态信息 print(message) # 输出动态信息 print("\n","="*29,"over","="*29,"\n")
读取一行
file.readline()
方法同read()
例
在蚂蚁庄园的动态栏目中记录着庄园里的新鲜事。现在想要显示庄园里的动态信息,请逐行显示蚂蚁庄园的动态。
print("\n","="*25,"蚂蚁庄园动态","="*25,"\n") with open('message.txt','r') as file: # 打开保存蚂蚁庄园动态信息的文件 number = 0 # 记录行号 while True: number += 1 line = file.readline() if line =='': break # 跳出循环 print(number,line,end= "\n") # 输出一行内容 print("\n","="*29,"over","="*29,"\n")
读取全部行
file.readlines()
方法同上