9.0、Python基础---文件操作(案例)(读、写)下

目录

9.3、写入文件

9.3.1、写入空文件

9.3.2、写入多行

9.3.3、附加到文件

9.3.4、seek() 和 tell() 函数


9.3、写入文件

保存数据的最简单的方式之一是将其写入到文件中。通过将输出写入文件,即便关闭包含程序输出的终端窗口,这些输出也依然存在:你可以在程序结束运行后查看这些输出,可与别人分享输出文件,还可编写程序来将这些输出读取到内存中并进行处理。

9.3.1、写入空文件

要将文本写入文件,你在调用open()时需要提供另一个实参,告诉Python你要写入打开的文件。为明白其中的工作原理,我们来将一条简单的消息存储到文件中,而不是将其打印到屏幕上:

"""
file_path = r'write.txt'
或者
file_path = r'E:\pythonProject\Demo\write.txt'
"""
file_path = r'E:\pythonProject\Demo\write.txt'
with open(file_path,'w') as file_msg:
    file_msg.write('学习使我快乐!')

代码解析:

首先在.py项目文件同级目录中创建一个write.txt文件,之后调用open()打开文件,调用时,传递两个参数,第一个实参是要打开文件的名称;第二个实参(‘w’)是告诉Python,要用写入模式打开这个文件。打开文件时,可指定读取模式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r+')。如果你省略了模式实参,Python将以默认的只读模式打开文件。

如果你要写入的文件不存在,函数open()将自动创建它。然而,以写入('w')模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。

最后我们调用 write()方法将一个字符串写入文件,运行结果如下:

注意:Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数 str() 将其转换为字符串格式~

 

9.3.2、写入多行

1. 函数write()不会在你写入的文本末尾添加换行符,因此如果你写入多行时没有指定换行符,文件看起来可能不是你希望的那样:

file_path = r'E:\pythonProject\Demo\write.txt'
with open(file_path,'w') as file_msg:
    file_msg.write("只要肯努力,想要的都能自己得到")
    file_msg.write("生活不会惯着你,想要不被抛弃,必须自己争气")

运行结果:

我们可以发现都写在了同一行,如果想让换行,则可用 ‘\n’来控制:

file_msg.write("只要肯努力,想要的都能自己得到。\n")
file_msg.write("生活不会惯着你,想要不被抛弃,必须自己争气")

运行结果: 

 

2. Python 的文件对象中,不仅提供了 write() 函数,还提供了 writelines() 函数,可以实现将字符串列表写入文件中。

注意,写入函数只有 write() 和 writelines() 函数,而没有名为 writeline 的函数。

f = open('b.txt','r')
w = open('a.txt','w+')
w.writelines(f.readlines())
w.close()
f.close()

运行结果:

 需要注意的是,使用 writelines() 函数向文件中写入多行数据时,不会自动给各行添加换行符。

像显示到终端的输出一样,还可以使用空格、制表符和空行来设置这些输出的格式。

 

9.3.3、附加到文件

如果想给文件附加内容,不想覆盖原有的内容,可以用附加模式打开文件。用附加模式打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。如果指定的文件不存在,会自动创建一个空文件。

file_path = r'E:\pythonProject\Demo\write.txt'
with open(file_path,'a') as file_msg:
    file_msg.write("现在的你决定将来的你。\n")
    file_msg.write("今天的一切挣扎都是为明天积蓄力量,所以别放弃。\n")

运行结果:

 

9.3.4、seek() 和 tell() 函数

使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。那么,有没有办法可以自定指定读取的起始位置呢?答案是肯定,这就需要移动文件指针的位置。

文件指针用于标明文件读写的起始位置。假如把文件看成一个水流,文件中每个数据(以 b 模式打开,每个数据就是一个字节;以普通模式打开,每个数据就是一个字符)就相当于一个水滴,而文件指针就标明了文件将要从文件的哪个位置开始读起。

实现对文件指针的移动,文件对象提供了 tell() 函数和 seek() 函数。tell() 函数用于判断文件指针当前所处的位置,而 seek() 函数用于移动文件指针到文件的指定位置。

1. tell() 函数

基本语法格式如下:

file.tell()

# file 表示文件对象

案例:

测试文件指针位置。

file_path = r'E:\pythonProject\Demo\test.txt'
file = open(file_path,'r',encoding='utf-8')
print('当前指针位置===>'+str(file.tell()))
print('读取到的内容===>'+file.read(3))
print('当前指针位置===>'+str(file.tell()))
file.close()

运行结果:

当前指针位置===>0
读取到的内容===>轻轻的
当前指针位置===>9

小结

可以看出,当调用open()函数打开文件时,文件指针的起始位置为0,表示位于文件的开头处,当使用read()函数从文件中读取3个字符后,文件指针同时向后移动了3个字符的位置,这就表示,当程序使用文件对象读写收据时,文件指针会自动向后移动,读写多少数据,文件指针就会自动向后移动多少个位置。

 

2. seek() 函数

seek() 函数用于将文件指针移动至指定位置,该函数的语法格式如下:

file.seek(offset[, whence])

其中,各个参数的含义如下:

  • file:表示文件对象;
  • whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
  • offset:表示相对于 whence 位置文件指针的偏移量正数表示向后偏移,负数表示向前偏移。例如,当whence == 0 && offset == 3(即 seek(3,0) ),表示文件指针移动至距离文件开头处 3 个字符的位置;当whence == 1 && offset == 5(即 seek(5,1) ),表示文件指针向后移动,移动至距离当前位置 5 个字符处。

测试代码:

file_path = r'E:\pythonProject\Demo\test.txt'
f_obj = open(file_path,'rb')
# 判断文件指针的位置
print(f_obj.tell()) # 运行结果:0
# 读取一个字节,文件指针自动后移一个数据
print(f_obj.read(1)) # 运行结果: b'\xe8'
print(f_obj.tell()) # 运行结果:1

# 将文件指针向后移动6个字符的位置
f_obj.seek(6)
print(f_obj.tell()) # 6
print(f_obj.read(1)) # b'\xe7'
print(f_obj.tell()) # 7
# 将文件指针从当前位置(7),向后移动5个字符的位置
f_obj.seek(5,1)
print(f_obj.tell()) # 12
print(f_obj.read(1)) # b'\xe8'

# 将文件指针从文件末尾向前移动到距离2个字符的位置
f_obj.seek(-1,2)
print(f_obj.tell()) # 725
print(f_obj.read(1)) # b'\x82'
print(f_obj.tell()) # 726

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值