python之写入文本文件

写文件的很多操作,与读文件的操作是相同的,建议先看 读取文本文件

打开文件

读写文件,要先通过内置open()函数打开文件

open('文件路径',mode='模式',encoding='编码')

常用参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式,可省略。详细介绍在下面
  • encoding: 可选,指定编码,如utf-8,省略时采用系统默认编码,windows默认采用GBK编码

常用模式:

  • ‘w’:只写
    打开一个文件只用于写入。
    如果该文件已存在则打开文件,清空文件内容 并从开头开始编辑。
    如果该文件不存在,创建新文件。
  • ‘w+’:读写
    打开一个文件用于读写。
    如果该文件已存在则打开文件,先 清空文件内容 并从开头开始编辑。(也就是说打开文件后读取该文件,内容是空的)
    如果该文件不存在,创建新文件。
  • ‘a’:追加
    打开一个文件用于追加。
    如果该文件已存在,文件指针 将会放在文件的 结尾。也就是说,新的内容将会被写入到已有内容之后。不会清空文件
    如果该文件不存在,创建新文件进行写入。
  • ‘a+’:追加且可读
    打开一个文件用于读写。
    如果该文件已存在,文件指针 将会放在文件的 结尾。文件打开时会是追加模式。不会清空文件
    如果该文件不存在,创建新文件用于读写。

例子:

f=open('d:\\1.txt','w')
f=open('d:\\1.txt','w+',encoding='UTF-8')

关闭

从 读取文件 章节可知,一般情况操作完文件后,应及时关闭

关闭后,将内存中的 数据 立刻 写入 文件中,解释见下面写入文件

有的软件,在运行时, 会一直独占文件 ,这种时候,就 不能关闭 。
如:word、ppt、excel等,在实现某软件服务器时,在运行期间要一直输出日志,要一直独占日志文件,那么运行期间不用关闭

f.close()

异常处理

异常处理同读取文件操作,try...finally...和with语句都适用

写入文件

写入文本文件,先是将内存中的字符进行 编码转换,转换成二进制,然后将其写入到硬盘中

写入文件主要有三种方法

方法1

将字符串写入文件

len=write(str)

参数
str:要写入文件的字符串。

返回值
返回的是写入的字符长度。

例子:

打开文件时指定GBK编码,也是windows系统默认的编码,并将字符串写入文件,代码如下:

with open('c:/users/mym/desktop/2.txt','w',encoding='GBK') as f:

    len=f.write("窗前明月光\n")#\n是换行符
    print(len)
    len=f.write("疑是地上霜\n")
    print(len)
    len=f.write("举头望明月\n低头思故乡")
    print(len)

结果如下:

6
6
11

查看文件内容

python换行符与操作系统换行符

在python中,字符串 \n是换行符,在UNIX、linux中的换行符也是\n,在windows中换行符是\r\n,在写入文件时python根据操作系统,会 自动做转换 ,然后 写入 到文件中

例子2

改造上面的程序,在with语句最后休眠10秒钟,如下:

import time
with open('c:/users/mym/desktop/2.txt','w',encoding='GBK') as f:

    len=f.write("窗前明月光\n")
    print(len)
    len=f.write("疑是地上霜\n")
    print(len)
    len=f.write("举头望明月\n低头思故乡")
    print(len)
    time.sleep(10)

在这10秒内,打开文件,文件内容为空,内容为空时因为w模式,会清空文件,虽然写入内容,文件内容没有变化,直到10秒钟后,才能看见内容

注意:

调用 写入 方法并 没有 将字符串立刻写入文件,而是 写入缓冲区中,直到运行 flush() 或 close() 方法或程序 运行结束 后,才会 真正写入文件。

方法2

将序列中的字符串写入到文件,序列必须 全是字符串,如:list、tuple、set 等

writelines( [ str ])

参数:
序列,如:list、tuple、set 。str:要写入的字符串

返回值
无

例子

打开文件时指定UTF-8编码,并将字符串序列写入文件,代码如下:

with open('c:/users/mym/desktop/2.txt','w',encoding='utf-8') as f:

    t=('白日依山尽\n','黄河入海流\n')
    f.writelines(t)
    f.write('\n')
    d={'name','张三','age','18'}
    f.writelines(d)

执行结果:

白日依山尽
黄河入海流

18张三agename

多执行几次,会发现字典写入的顺序可能发生变化

注意:

同write(), 写入缓冲区

flush()

刷新缓冲区,将 缓冲区中 的数据立刻 写入 文件中

f.flush()

例子

import time
with open('c:/users/mym/desktop/2.txt','w',encoding='utf-8') as f:

    f.write('白日依山尽\n黄河入海流\n')
    f.flush()
    f.write('欲穷千里目\n更上一层楼\n')
    time.sleep(10)

休眠10秒,在10秒内,打开文件,可以看到下面内容:

白日依山尽
黄河入海流

因为执行了flush()方法刷新缓冲区,写入文件。10秒后执行结束,再次将缓冲区中的数据写入文件中,最后结果如下:

白日依山尽
黄河入海流
欲穷千里目
更上一层楼

移动文件指针

从读取文件章节可知,有中文时,移动指针可能会造成错误,所以一般不要将文件指针移动到中间位置。移动到头部不会造成错误

感谢:
http://www.runoob.com/python/python-files-io.html


原文出处:/show_1EF1RZGMiNqm.html