python文件的使用

189 阅读4分钟

文件的使用

在实际的开发使用中,我们不可能每获取一次数据便运行一次程序,这样太显得繁琐,而且其中的数据无法得到有效的利用,这样我们需要将我们的程序运行的某些结果保存到本地,最简单的方式便是保存到文件中

在 Python 中对于文件的操作十分简单,我们只需要使用内置函数open打开文件之后便可以轻松的实现相应的操作了。 在open使用中含有以下的参数:

操作模式 具体含义
'r' 读取 (默认)
'w' 写入(会先截断之前的内容)
'x' 写入,如果文件已经存在会产生异常
'a' 追加,将内容写入到已有文件的末尾
'b' 二进制模式
't' 文本模式(默认)
'+' 更新(既可以读又可以写)

读取文件

在读取文件的时候,我们需要指定文件的路径名,可以使用绝对路径,也可以使用相对路径,并且同时我们需要将文件模式设置为'r'模式(如果不设置,默认也为'r'),同时我们可以使用encoding指定打开文件的编码格式,如果与文件的编码格式不同,读写出来的文件内容可能乱码

下面假设我们有一个test.txt文件,内容如下(每行后面添加了换行符):

Welcome here to learn python.
As you have seen, python is such
a powerful programming language,
and I hope you can learn a lot
from here
	------Cyberist

使用下面的代码便可以轻松读取文本中的内容

f = open('test.txt', 'r', encoding='utf-8')
data = f.read()
print(data)

但是有时候文件很大,这样一次性使用read函数效率并不是很高,这样的话,我们可以使用readlinereadlines函数,readline读取文件中的一行,然后文件操作指针移动到下一行的文件开头,readlines每次读取文件的一行,并返回一个列表,列表的元素为对应的行文本

f = open('test.txt', 'r')
data1 = f.readline()
print(data1)
for text in f.readines():
	print(text)
# 输出 data1
# Welcome here to learn python.
# 输出 text
# As you have seen, python is such
# a powerful programming language,
# and I hope you can learn a lot
# from here
# 	------Cyberist

在上面的例子中,我们发现,循环中的文本并不是从文本最开始的地方读写的,这个是因为每次读取的时候,文件的操作指针都在移动,操作之后指针并没有重新的指向文件的开头,而是停留在读取之后的位置,如果我们想要重新读取,可以使用seek来实现

f.seek(0) # -- 文件指针重新回到第一个字符

# 我们也可以定义到想要的位置
f.seek(3) # -- 文件指针定位到第四个字符

反复使用readline函数可以实现和readlines类似效果

写入文件

写入文件的时候,我们也需要指定对应的文件路径,并设置文件的操作模式为'w',此时如果没有对应的文件,会创建对应的文件,如果对应的文件已经存在,那么之前文件中的文本便会被清空,然后调用write函数便可以轻易的写入文件

data = 'date 2019-11-21'
f.write(data)

使用上述方法,我们可以观察到文件中添加了我们写入的文本 如果我们想要不删除原来的文本,可以指定文件的操作模式为'a'

读写二进制文件

其实读取和写入二进制文本和普通文本是一样的,只是我们在打开文件的时候应该指定文件的操作模式为wb, rb,利用二进制的写,我们可以实现对图片的复制,比如以下代码:

f = open('test.png', 'rb')
data = f.read()
f2 = open('test_copy.png', 'wb')
f2.write(data)

在我们对文件进行操作完成之后,我们应该及时使用close函数对文件进行关闭,以免造成意外的效果

读写文本时除了以上方法之外,我们还有更好的方式,就是使用
with open(...) as file_name
格式,这种方式对文件进行操作之后会自动关闭文件

with open('test.txt', 'r') as file:
	data = file.read()
  print(data)

练习

下面我们简单的使用文件的操作将从 1 到 1000 所有的斐波拉契数字写入到我们的文件中

with open('data.txt', 'w') as file:
    a = 1
    b = 1
    file.write(str(a)+'\t')
    while b < 1000:
        file.write(str(b)+'\t')
        b, a = a+b, b