04文件操作2(打开模式)

1、普通打开模式

  1)r,英文:read,只读模式(默认)
  2)w,英文:write,只写模式(不可读,不存在则创建新文件,存在则删除内容)
  3)a,英文:append,追加模式(不可读,不存在则创建,存在则只追加内容

In [4]:
# r(读)
filename = 'data\programming.txt'
f = open(filename,'r')
print(f.read())
f.write('nihao')
f.close()
 
I love programming.
I love creating new games.
I also love finding meaning in large datasets.
I love creating apps that can run in a browser.
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
<ipython-input-4-08974b0db28e> in <module>
      3 f = open(filename,'r')
      4 print(f.read())
----> 5f.write('nihao')
      6 f.close()

UnsupportedOperation: not writable

  注:读操作,只能是只读,不能写和追加

In [7]:
# w(写)
f = open(filename,'w')
f.write('nihaowohao')
f.close()
 

programming.txt

nihaowohao

  注:写操作只能写,不能读和追加,而且写操作会重新创建一个文件,会覆盖之前的文件

In [8]:
# a(追加)
f = open(filename,'a')
f.write('caishizhenhao')
f.close()
 

programming.txt

nihaowohaocaishizhenhao

  注:追加模式不可读,不存在则创建,存在则只追加内容

 

2、同时读写模式

  1)r+,可读写文件(可读;可写;可追加,不存在文件则报错)
  2)w+,可写读文件(可读,可写,创建新文件)
  3)a+,可追加和读文件(可读,可追加,不存在则创建)

In [19]:
# r+(读写)
f = open(filename, 'r+', encoding='utf-8')  # utf-8 才支持中文
print(f.readline())
print(f.tell())
f.write('帅帅帅')
f.seek(0) # 光标指针退到最开始的位置
print(f.readline())
f.close()
nihaowohaocaishizhenhao
23
nihaowohaocaishizhenhao帅帅帅
In [27]:
# (写读)
# 写读的功能是:创建新文件->写入文本->设置指针为开始位置(seek(0))->读取到文件内容
f = open(filename,"w+",encoding="utf-8")
print(f.read())
f.write("qigao zui lang")
f.seek(0)
print(f.read())
print(f.tell())
f.write("qigao zui lang
")
f.seek(0)
print(f.read())
f.close()
 
qigao zui lang
14
qigao zui langqigao zui lang

In [29]:
# a+(追加和读)
# 追加和读:追加读在写入文件时,不会清空之前的内容,而是在之前的内容的追加一行,读取文件内容,需要重新设置指针
f = open(filename, "a+", encoding="utf-8")
print("--------data1-----")
print(f.read())  #没有设置指针
print("--------data2-----")
f.seek(0)
print(f.read())  #设置指针
f.write("qigao zui lang")
print("---------data3----")
print(f.read())  #写完以后没有设置指针
print("--------data4-----")
f.seek(0)
print(f.read())  #写完以后设置指针
f.close()
 
--------data1-----

--------data2-----
qigao zui langqigao zui lang

---------data3----

--------data4-----
qigao zui langqigao zui lang
qigao zui lang
 

3、二进制打开模式

  1)rb,二进制读
  2)wb,二进制写
  3)ab,二进制追加
  这种打开模式就要注意了,这种是以二进制操作的,也就是说不管是是读,写,追加,都必须是二进制文件,也就是字节,而不是字符,需要解码以后才会生成字符。一般情况下跨平台的文件,视频文件等需要二进制模式操作。

In [60]:
# f = open(filename,'r+')
# print(f.read())

#二进制读取
f = open(filename, "rb")

f_read = f.read()
f_read # 没有解码,读出来的是二进制,也就是字节码
Out[60]:
b'qigao zui langqigao zui lan
'
In [63]:
f_read.decode()  # 解码后,是字符
Out[63]:
'qigao zui langqigao zui lan
'
In [76]:
# wb(二进制写)
f = open(filename, 'wb')
str = '我最帅'
en_str = str.encode()  # 写入文件,就需要编码,否则就会报错
f.write(en_str)
f.close()
In [77]:
f=open(filename,'r',encoding='utf-8')
print(f.read())
f.close()

我最帅
In [78]:
# ab(二进制追加)
f = open(filename, "ab")
in_str = "gaoge,shuai de yibi"
# 这边需要先编码,才能追加到文件中
in_str = in_str.encode()

f.write(in_str)
f.close()
In [79]:
f = open(filename,'r',encoding='utf-8')
print(f.read())
f.close()

我最帅gaoge,shuai de yibi
 

总结:

  普通打开模式和二进制打开模式,只是在python 3中,二进制打开模式才做了字符和字节的编码和解码;然而在python 2中,字节和字符没有做明显的区别,所以在python 2中,二进制模式读取文件时,不需要做编码和转码的操作。

 
原文地址:https://www.cnblogs.com/xinmomoyan/p/10821938.html