前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶教程笔记(五)读写文件

Python进阶教程笔记(五)读写文件

作者头像
Lemon黄
发布2020-10-30 11:43:04
5980
发布2020-10-30 11:43:04
举报
文章被收录于专栏:Lemon黄Lemon黄

一、向Python程序输入内容

到目前为止,我们编写的程序都是直接运行的,在运行过程中并没有接收程序外部的输入。比如,通过Python程序,我们可以快速算出从1到100的乘法结果。

代码语言:javascript
复制
result = 1
for i in range(1, 101):
    result = result * i

print(result)

但是如果需要计算从1到200的乘法结果,则只能通过修改程序去实现。

代码语言:javascript
复制
result = 1
for i in range(1, 201):
    result = result * i

print(result)

如果可以通过输入,改变计算的范围,那就好了,input()函数可以接收外部的输入。

代码语言:javascript
复制
>>> num = input('please input number: ')
please input number: 201
>>> print(num) 
201

因此,通过input()函数,则可以改变上面程序运行的范围,注意:输入的是字符串,需要转型为数字类型。

代码语言:javascript
复制
num = input('please input number: ')

num = int(num)
result = 1
for i in range(1, num):
    result = result * i

print(result)

二、打开文本文件

通过print()可以从数据输出数据,通过input()可以向程序输入数据,但这些都是标准屏幕上的操作,本节课学习文件的读写操作。

Python 提供了open()函数,可以打开一个文件,得到一个文件file对象,而file对象提供相关的方法对文件内容进行读写等操作。

open()函数有若干个参数,比较重要的是以下三个参数:

  1. 文件路径:指定需要打开的文件的文件路径
  2. 打开模式:针对不同文件(二进制文件、文本文件)以及不同操作(读操作、写操作),会有不同的打开模式
  3. 编码:设定打开文件的默认编码

常用的打开模式如下:

模式

描述

t

文本模式(默认)

x

写模式,新建一个文件

b

二进制模式,打开二进制文件

+

更新一个文件(可读可写)

r

以只读模式打开一个文件

rb

以二进制格式只读模式打开一个文件

w

打开一个文件进行写入,如果文件内容已存在,会清除原有的内容

wb

以二进制格式只写模式打开一个文件,会清除原有的内容

a

打开一个文件并追加内容,会往文件尾部添加内容

ab

以二进制格式打开一个文件并追加内容,会往文件尾部添加内容

w+

打开一个文件进行读写,如果文件内容已存在,会清除原有的内容

a+

打开一个文件并使用追加进行读写

注意,为了安全操作文件,文件使用完毕后,需要使用close()函数正确关闭。 在当前目录下新建一个test.txt文件,并新建一个main.py,此时文件目录如下:

代码语言:javascript
复制
|-- test.txt
+-- main.py
代码语言:javascript
复制
f = open('test.txt', 'r') # 打开test.txt文件
type(f) # 打印f的类型(<class '_io.TextIOWrapper'>)
f.close() # 关闭文件

注意,在打开文本文件是并不需要特别指定模式t,因为默认就是以文本方式打开文件的。

三、打开二进制文件

除了文本以外,还有大量的非文本文件,比如图片、压缩文件、视频文件、音乐文件等等,这种文件统称为二进制文件,在Python中打开二进制文件,需要不同的打开模式。

模式

描述

b

二进制模式,打开二进制文件

wb

以二进制格式只写模式打开一个文件,会清除原有的内容

ab

以二进制格式打开一个文件并追加内容,会往文件尾部添加内容

rb

以二进制格式只读模式打开一个文件

代码语言:javascript
复制
f = open('test.jpg', 'rb')
f.close()

四、读取文件内容

打开文件之后,就可以读取文件的内容,文件对象提供多种读取文件内容的方法。 打开test.txt文件:

代码语言:javascript
复制
f = open('test.txt', 'r') # 打开test.txt文件
f.close() # 关闭文件

test.txt文件有以下内容

代码语言:javascript
复制
Hello World.
Hello Python.
Hello Imooc.

读取若干字符

文件对象提供read()方法,可以读取文件中的若干个字符,它提供一个参数size,可以指定读取字符的数量。

代码语言:javascript
复制
s = f.read(5)
print(s) # ==> Hello

当read()之后,访问文件的游标就会移动到第六个字符前面,此时,继续read,将得到Hello后面的结果。

代码语言:javascript
复制
s = f.read(6)
print(s) # ==> ' World'

读取一行

文件对象提供readline()方法,和read()方法类似,可以读取文件中的若干个字符,它也提供一个参数size,可以指定读取字符的数量,不过和read()方法不同的是,readline()方法遇到一行结束的时候,就会返回。

代码语言:javascript
复制
f.close()
f = open('test.txt', 'r') # 重新打开文件
s = f.readline(20)
print(s)  # ==> 'Hello World.\n'

可以看到,打印的内容并没有20个字符,readline最多返回一行的所有字符。

读取多行

文件对象提供readlines()方法,可以读取多行字符,返回一个列表。它提供一个hint参数,表示指定读取的行数,没有指定则默认以列表的形式返回文件所有的字符串。

代码语言:javascript
复制
f.close()
f.open('test.txt', 'r')
s = f.readlines()
print(s) # ==> ['Hello World.\n', 'Hello Python.\n', 'Hello Imooc.\n']

五、把字符串写入文件

要把字符串内容写入文件,需要使用w的模式打开文件。

模式

描述

w

打开一个文件进行写入,如果文件内容已存在,会清除原有的内容

wb

以二进制格式只写模式打开一个文件,会清除原有的内容

w+

打开一个文件进行读写,如果文件内容已存在,会清除原有的内容

代码语言:javascript
复制
f = open('test.txt', 'w')

写入若干字符

文件对象提供write方法向文件内写入若干字符,它接受一个字符串参数,表示需要写入的字符串。

代码语言:javascript
复制
f = open('test.txt', 'w')
f.write('Hello World\n')
f.close()

写入若干行

文件对象提供writelines()方法向文件内容写入多行数据,它接受一个列表,表示需要写入的字符串列表。

代码语言:javascript
复制
lines = ['Hello World\n', 'Hello Python\n', 'Hello Imooc\n']
f = open('test.txt', 'w')

f.writelines(lines)
f.close()

六、往文件追加内容

通过w的打开方式打开文件,会清空文件的内容,这在很多场景下是不合适的,比如写系统日志的时候,需要累积随时间推移的所有数据。

Python提供文件追加内容的打开模式,可以往文件尾部添加内容,又不清空文件原有的内容。

模式

描述

a

打开一个文件并追加内容,会往文件尾部添加内容

ab

以二进制格式打开一个文件并追加内容,会往文件尾部添加内容

a+

打开一个文件并使用追加进行读写

代码语言:javascript
复制
f = open('test.txt', 'a')
f.write('Hello Everyone\n')
f.close()

使用a的打开方式打开文件,文件游标默认是在文件的尾部,因此,可以便捷的往文件尾部添加内容,除此以外,文件对象还提供seek()方法,可以移动文件的游标位置,它接受一个参数,表示文件的位置,0:文件首部,1:当前位置,2:文件尾部,通过seek()可以把文件游标移动到文件首部但不删除文件的内容。

代码语言:javascript
复制
f = open('test.txt', 'a+')
content = f.readlines()
print(content) # ==> []
f.seek(0)
content = f.readlines()
print(content) # ==> ['Hello World\n', 'Hello Python\n', 'Hello Imooc\n']

第一次print(content)的时候,由于文件游标在文件的尾部,所以readlines()读取不到任何数据,打印了空的结果,第二次print(content)的时候,由于通过seek(0),文件游标移动到了文件的首部,因此readlines()就返回了文件所有的内容。

七、正确关闭文件

在进行文件操作的时候,正确关闭一个文件非常重要,如果在文件读写后,没有正确关闭一个文件的话,则有可能导致文件损坏,文件内容丢失等问题。

在一般情况下,我们使用文件对象的close()方法,来关闭一个文件。 但是,使用close()方法,也不是100%安全的,如果在close()文件之前,程序异常退出了,那么文件也得不到正确的关闭。比如:

代码语言:javascript
复制
f = open('test.txt', 'a+')
exit(-1) # ==> 模拟程序异常退出
f.close() # ==> close语句永远的不到执行

在实际工程中,close()文件之前,为了正确关闭文件,需要考虑各种异常情况,这是非常麻烦的一件事,Python提供with关键字,可以免除这类后顾之忧。

with关键字对资源进行访问的场合,会确保不管在使用过程中是否发生异常,都会执行必要的“清理”的操作,释放资源,比如文件使用后自动关闭等等。

with的使用方法如下:

代码语言:javascript
复制
with open('test.txt', 'r') as f:
    content = f.readlines()
    for line in content:
        print(line)

当文件使用结束后,不需要显式的调用f.close()关闭文件。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lemon黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、向Python程序输入内容
  • 二、打开文本文件
  • 三、打开二进制文件
  • 四、读取文件内容
    • 读取若干字符
      • 读取一行
        • 读取多行
        • 五、把字符串写入文件
          • 写入若干字符
            • 写入若干行
            • 六、往文件追加内容
            • 七、正确关闭文件
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档