您现在的位置是:网站首页>Python编程Python编程

儿童python教程234:Python write()和writelines():向文件中写入数据

少儿编程网2019-12-04 22:01:00Python编程 人已围观 来源:少儿编程 -用户投稿

简介前面章节中学习了如何使用 read()、readline() 和 readlines() 这 3 个函数读取文件,如果我们想把一些数据保存到文件中,又该如何实现呢?

前面章节中学习了如何使用 read()、readline() 和 readlines() 这 3 个函数读取文件,如果我们想把一些数据保存到文件中,又该如何实现呢?Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
python 中的文件对象提供了 write() 函数,可以向文件中写入指定内容。该函数的语法格式如下:

file.write(string)Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

其中,file 表示已经打开的文件对象;string 表示要写入文件的字符串(或字节串,仅适用写入二进制文件中)。

注意,在使用 write() 向文件中写入数据,需保证使用 open() 函数是以 r+、w、w+、a 或 a+ 的模式打开文件,否则执行 write() 函数会抛出 io.UnsupportedOperation 错误。Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

例如,创建一个 a.txt 文件,该文件内容如下:

少儿编程Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
www.pxcodes.comGo3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

然后,在和 a.txt 文件同级目录下,创建一个 Python 文件,编写如下代码:

f = open("a.txt", 'w')

f.write("写入一行新数据")

f.close()
前面已经讲过,如果打开文件模式中包含 w(写入),那么向文件中写入内容时,会先清空原文件中的内容,然后再写入新的内容。因此运行上面程序,再次打开 a.txt 文件,只会看到新写入的内容:

写入一行新数据Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
而如果打开文件模式中包含 a(追加),则不会清空原有内容,而是将新写入的内容会添加到原内容后边。例如,还原 a.txt 文件中的内容,并修改上面代码为:

f = open("a.txt", 'a')

f.write("\n写入一行新数据")

f.close()
再次打开 a.txt,可以看到如下内容:

少儿编程网Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
www.pxcodes.comGo3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
写入一行新数据Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

因此,采用不同的文件打开模式,会直接影响 write() 函数向文件中写入数据的效果。Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
另外,在写入文件完成后,一定要调用 close() 函数将打开的文件关闭,否则写入的内容不会保存到文件中。例如,将上面程序中最后一行 f.close() 删掉,再次运行此程序并打开 a.txt,你会发现该文件是空的。这是因为,当我们在写入文件内容时,操作系统不会立刻把数据写入磁盘,而是先缓存起来,只有调用 close() 函数时,操作系统才会保证把没有写入的数据全部写入磁盘文件中。Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
除此之外,如果向文件写入数据后,不想马上关闭文件,也可以调用文件对象提供的 flush() 函数,它可以实现将缓冲区的数据写入文件中。例如:

f = open("a.txt", 'w')

f.write("写入一行新数据")

f.flush()
打开 a.txt 文件,可以看到写入的新内容:

写入一行新数据Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

有读者可能会想到,通过设置 open() 函数的 buffering 参数可以关闭缓冲区,这样数据不就可以直接写入文件中了?对于以二进制格式打开的文件,可以不使用缓冲区,写入的数据会直接进入磁盘文件;但对于以文本格式打开的文件,必须使用缓冲区,否则 Python 解释器会 ValueError 错误。例如:

f = open("a.txt", 'w',buffering = 0)

f.write("写入一行新数据")
运行结果为:

Traceback (most recent call last):Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
  File "C:\Users\mengma\Desktop\demo.py", line 1, in <module>Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
    f = open("a.txt", 'w',buffering = 0)Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
ValueError: can't have unbuffered text I/OGo3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Python writelines()函数

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

注意,写入函数只有 write() 和 writelines() 函数,而没有名为 writeline 的函数。Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

例如,还是以 a.txt 文件为例,通过使用 writelines() 函数,可以轻松实现将 a.txt 文件中的数据复制到其它文件中,实现代码如下:

f = open('a.txt', 'r')

n = open('b.txt','w+')

n.writelines(f.readlines())

n.close()

f.close()
执行此代码,在 a.txt 文件同级目录下会生成一个 b.txt 文件,且该文件中包含的数据和 a.txt 完全一样。Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
Go3少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
需要注意的是,使用 writelines() 函数向文件中写入多行数据时,不会自动给各行添加换行符。上面例子中,之所以 b.txt 文件中会逐行显示数据,是因为 readlines() 函数在读取各行数据时,读入了行尾的换行符。

相关文章:

支持一下 ( )查看更多相似文章

儿童python教程234:Python write()和writelines():向文件中写入数据

      匿名评论
    • 评论
    人参与,条评论
    儿童python教程234:Python write()和writelines():向文件中写入数据

客服在线

服务时间

周一至周日 9:00-21:00