文件处理 09

1.文件的打开和关闭

文件指存储在外部介质(如磁盘等)上有序的数据集合,这个数据集有一个名称,称为文件名。按数据的组织形式不同,可以将文件分为文本文件二进制文件两大类。

文本文件一般由单一特定编码的字符组成,如UTF-8编码,内容容易统一展示和阅读。

二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。

Python对文本文件和二进制文件采用统一的操作步骤:

1)打开文件,或者新建文件;

(2)读/写文件;

(3)关闭文件。

1.1文件的打开

Python内置了文件对象,通过open()函数即可按照指定模式打开指定文件,并创建文件对象

其语法格式如下:

image-20210804160224514

1.1.1 打开方式

文件的打开方式及含义

j'

(1) 用只读方式“r”打开文件时,该文件必须已经存在,否则出错,且只能进行读取操作,打开时文件位置指针在文件的开头

(2)用只写方式“w”打开文件时,如文件不存在,则以指定的文件名新建文件。若打开的文件已经存在,则原文件内容消失重新写入内容日只能进行写操作

(3)用追加方式“a”打开文件时,如果文件已存在,文件位置指针在文件的结尾

也就是说,新的内容被写入到已有内容之后,如果文件不存在,则创建新文件进行写入。(4)“r+”“w+”“a+”都是既可读亦可写,区别在于“r+”与“r”一样,文件必须L经存在:“w+”和“w”一样,如文件不存在则新建文件,写后可以读:“a+”则是打开文件后可以在文件末尼增加新数据亦可以读取文件。

(5)打开方式带上“b”表示是以二进制文件格式进行操作。

1.2.文件的关闭

在Python中,虽然文件会在程序退出后自动关闭,但是考虑到数据的安全性,在每次使用完文件后,都需要使用close()方法关闭文件

其语法格式如下:

文件对象名.close()

例如:以只写方式打开一个名为“test.txt”的文件,然后关闭文件,代码如下:

file = open('test.txt','w')		#以只写方式打开一个名为“test.txt”的文件
file.close()			#关闭文件

2.上下文管理语句with

with语句用于对资源进行访问,保证不管处理过程中是否发生错误或者异常,都会执行规定的__exit__(清理)操作,释放被访问的资源,常用于文件操作、数据库连接、网络通信连接、多线程与多进程同步时的锁对象管理等场合。

其语法格式如下:

image-20210804172159370

例如:用于文件内容读写时,with语句的用法如下:

with open(文件名[,打开方式]) as文件对象名:
    #通过文件对象名读写文件内容语句

3.文件的读写

3.1.读文件

3.1.1 read()方法

read()方法用于从文件中读取指定的字节数,如果未给定参数或参数为负,则读取整个文件内容

读取所有内容,执行完该操作后,文件指针会移动到文件末尾

其语法格式如下:

文件对象名.read([size])  #size为从文件中读取的字节数
					  #该方法返回从文件中读取的字符串

例:使用read()方法读取“testfile.txt”文件

with open('testfile.txt','r') as file:	#以只读方式打开原有的名为“testfile.txt”的文件
    line = file.read(10)		#读取前10个字节
    print(line)				    #输出前10个字节


3.1.2 readline()方法

readline()方法用于从文件中读取整行,包括“\n”字符。如果指定了一个非负数的参数,则表示读入指定大小的字符串

读取一行内容,光标移动到第二行首部

文件对象名.readline([size]) #size为从文件中读取的字节数

例:使用readline()方法读取“testfile.txt”文件

with open('testfile.txt','r') as file:	#以只读方式打开原有的名为“testfile.txt”的文件
    line = file.readline()		#读取一行

3.1.3 readlines()方法

readlines()方法用于读取所有行(直到结束符EOF)并返回列表,列表中每个元素为文件中的一行数据

其语法格式如下:

文件对象名.readlines()

例:使用readlines()方法读取“testfile.txt”文件

with open('testfile.txt','r') as file:	#以只读方式打开原有的名为“testfile.txt”的文件
    content = file.readlines()	#读取所有行并返回列表
print(content)			#输出列表

3.2写文件

提示

如果打开文件时,文件打开方式带“b”,那么写入文件内容时,str(参数)要用encode方法转为字节流形式,否则报错。file.write(‘Interface options’.encode())

3.2.1 write()方法

write()方法用于向文件中写入指定字符串

其语法格式如下:

文件对象名.write(str)

3.2.2 writelines()方法

writelines()方法用于向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表

其语法格式如下:

文件对象名.writelines(sequence)
ls = ['Environment\n','variables']	
with open('testfile.txt','a') as file:	  #testfile.txt文件没有任何东西
    file.writelines(ls)			#向文件中追加字符串列表
    
    #文件内容为:
    Environment
	variables

4.主动控制指针移动

4.1.获取当前指针位置

在读写文件的过程中,如果想知道当前文件位置指针的位置,可以通过调用tell()方法来获取。tell()方法返回文件的当前位置,即文件位置指针当前位置。

其语法格式如下:

文件对象名.tell()

例:使用tell()方法获取文件当前的读写位置。

with open('testfile.txt','r') as file:	#以只读方式打开名为“testfile.txt”的文件
    line = file.read(8)		#读取前8个字节
    print(line)			#输出前8个字节
    p = file.tell()			#获取指针当前位置
    print('当前位置:',p)		#输出当前位置
    line = file.read(4)		#继续读取4个字节
    print(line)			#输出读取到的数据
    p = file.tell()			#获取指针当前位置
    print('当前位置:',p) 		#输出当前位置

image-20210805195924062

4.2.定位到某个位置

如果在读写文件的过程中,需要从指定的位置开始读写操作,就可以使用seek()方法实现。seek()方法用于移动文件位置指针到指定位置,

三种模式:0,1,2

0:参照文件开头,只有0模式可以在t下使用,其他的都只能在b下使用

1:参照指针当前所在的位置,只能在b下使用

2:参照指针文件末尾,通常是倒着移动,只能在b下使用

其语法格式如下:

image-20210805200459716

# f.seek(移动的字节个数,模式)
# 模式:
# 0:参照文件开头,只有0模式可以在t下使用,其他的都只能在b下使用
# with open('b.txt',mode='rt',encoding='utf-8') as f:
#     f.seek(3,0)
#     f.seek(6,0)
#     print(f.tell())

# 1:参照指针当前所在的位置,只能在b下使用
# with open('b.txt',mode='rb') as f:
#     f.seek(3,1)
#     f.seek(6,1)
#     print(f.tell())

# 2:参照指针文件末尾,通常是倒着移动,只能在b下使用
# with open('b.txt',mode='rb') as f:
#     f.seek(-5,2)
#     f.seek(-8,2)
#     print(f.tell())
#     print(f.read().decode('utf-8'))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值