Python文件读写模式解析

Python中打开文件命令 open(),open命令返回文件的一个句柄:如:
f = open('e:\\123.txt')

# read()对打开的文件进行读的操作
print(f.read())

# 关闭文件,文件打开后一定要记得关闭文件。在写的时候 可以:打开,关闭先写完,再写打开和关闭中间的代码
 f.close()

以上代码均可正常运行,但如果输入如下代码:

f = open('e:\\123.txt') 
#这段代码,open 没有指定 mode= 参数,默认使用只读的方式打开文件,文件没有写的权限
f = open('e:\\123.txt')
f.write('hello python')
f.close()
则会报错 io.UnsupportedOperation: not writable

另外,如果没有使用为open指定 encoding= 参数,计算机默认使用系统的编码方式打开文件。windows下默认为 gbk, linux下默认为utf-8
文件的打开方式格式: 文件句柄 = open('文件路径','打开模式', '编码方式')

其中打开模式有如下几种:

1.r, 只读的方式打开(文件必须存在,如果文件不存在,则会抛出异常) 注:文件以什么方式编码方式写的,就以什么编码方式打开

f = open('e:\\123.txt',mode='r',encoding='utf-8')
print(f.read())
f.close()

2.w, 只写模式 (文件不可读,如果文件不存在,则创建一个新的文件,如果文件存在,则会清空里面的内容)

f = open('e:\\123.txt',mode='w',encoding='utf-8')
f.write('hello python!') # 在写的时候,要指定编码的方式
f.close()

3.a,只追加写的模式 (文件不可读,不存在则创建新的文件,文件存在的话,在后面追加内容)

f = open('e:\\123.txt',mode='a',encoding='utf-8')
f.write('jack is a student')
f.close()

4.对于非文本的文件,使用b的模式。'b'表示以字节的方式进行操作 如:rb,wb,ab 分别对应以上内容,如果以b的方式打开,读取到的内容是字节类型,写入的时候也需要提供字节类型,不能指定编码

f = open('e:\\123.txt',mode='rb') # 指定encoding= 参数 会报错
print(f.read())  # b'\xd6\xd0\xb9\xfa
f.close()

以上代码 输出:b'\xd6\xd0\xb9\xfa' 如果在写的模式下,写的时候也要以字节的方式进行写入

5.'+'模式 ---- r+: 读写模式 w+:写读模式 a+:写读模式

f = open('e:\\123.txt',mode='r+',encoding='gbk')
print(f.read())
f.write('helo')
print(f.read()) # 此处在读的时候,就读不到 后面的 hello了,因为,在执行完 write(’hello') 这段代码后,光标移动到了文件的末尾
f.close()

在 r+ 模式下,应该先读,后写,如果先写,后读,光标移动到了文件末尾,将读取不到内容

如果要实现在r+模式下实现先写,后读,则采用f.seek(0)的命令,使光标移动到文件开头,在进行读的操作。另外,可以采用f.tell() 命令来获得当前光标的位置。其中需要注意的是:如果是英文字母,则一个字符为一个位置,如果是其他,按照编码方式来指定或者获取位置,中文 utf-8 的编码方式,一个汉字占用 3 个字节。f.read(x) 在读取的时候,按照能用眼睛看到的最小单位来读取,如f.read(3)对英文就是读3个字母,如汉字就是3个汉字。

6.文件读取的注意事项:

很多时候,在读写文件的时候,只是打开文件,open 而忘记关闭文件,close,可以使用简单的方式来操作,使用with open。如:

l1 = ['静夜思','李白','床前明月光','疑是地上霜','举头望明月','低头思故乡']
with open('e:\\静夜思.txt',mode='w+',encoding='utf-8') as f:
     for l1_data in l1:
         f.write(l1_data + '\n')    # f.writelines(l1) 可以将列表l1中的内容全部写进去,但是不换行

     f.seek(0)  # 将光标放到文件首
     print(f.readlines()) # 逐行读取文件,并将文件按行为元素保存到一个列表中
     f.seek(3)
     index = f.tell() # 获取当前光标的位置
     print(index)  # 打印 3

这样既可实现用完文件后自动关闭了,防止文件丢失。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值