文件的打开方式

文件的打开方式

文件操作的基础模式有三种(默认的操作模式为r模式):

  • r模式为read #只读
  • w模式为write #只写,清空文件在写入
  • a模式为append #在后面追加写入文件

文件读写内容的格式有两种(默认的读写内容为b模式):

  • t模式为text
  • b模式为bytes #b表示,你写的字符串为二进制,在打印的时候不需要使用终端的编码处理,直接打印原生的二进制即可

需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。r/w/a能单独使用

文件打开模式之r模式

r:read,只读模式,只能读不能写,文件不存在时报错。

r,r告诉接下来的字符串,里面所有的特殊字符变得无意义

f=open(r\'F:\FTP.txt\',mode=\'r\',encoding=\'utf8\')  
# data=f.read()
# print(data)
# f.close()
f.write("QWERTYUIOSDFGHJKZXVBNM")   #清空文件后再写入
f.close()
f = open(r\'F:\FTP.txt\',mode=\'r\',encoding=\'utf8\')
data=f.read()
print(data)

Traceback (most recent call last):
  File "D:/Program Files/JetBrains/python学习/tday 11/练习.py", line 12, in <module>
    f.write("QWERTYUIOSDFGHJKZXVBNM")
io.UnsupportedOperation: not writable
f=open(r\'F:\FTQ.txt\',mode=\'r\',encoding=\'utf8\')
data=f.read()
print(data)
f.close()

Traceback (most recent call last):
  File "D:/Program Files/JetBrains/python学习/tday 11/练习.py", line 8, in <module>
    f=open(r\'F:\FTQ.txt\',mode=\'r\',encoding=\'utf8\')
FileNotFoundError: [Errno 2] No such file or directory: \'F:\\FTQ.txt\'
#  rt:read by text  把文件以文本形式读取出来
f=open(r\'F:\FTP.txt\',mode=\'rt\',encoding=\'utf8\')   
data=f.read()
print(data)
print(f\'data:{type(data)}\')
f.close()

112345678924567890234678167890112345670987876098765430987654
data:<class \'str\'>    
# rb:read by bytes  以字节形式(二进制)读取出来,因为所有的文件在硬盘中都是以二进制的形式存储的,b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码。
f=open(r\'F:\FTP.txt\',mode=\'rb\')
data=f.read()
print(data)
print(f\'type(data):{type(data)}\')
f.close()

b\'\xef\xbb\xbf112345678924567890234678167890112345670987876098765430987654\'
type(data):<class \'bytes\'>

f.read()读取文件指针会跑到文件的末端,如果再一次读取 ,读取的将是空格。

f=open(r\'F:\FTP.txt\',mode=\'rt\',encoding=\'utf8\')
data1=f.read()
data2=f.read()
print(f\'data1:{data1}\')
print(f\'data2:{data2}\')
f.close()

data1:112345678924567890234678167890112345670987876098765430987654
data2:

由于f.read()一次性读取文件的所有内容,如果文件非常大的话,可能会造成内存爆掉,即电脑卡死。因此可以使用f.readline()/f.readlines()读取文件内容。

f=open(r\'F:\FTP.txt\',mode=\'rt\',encoding=\'utf8\')
print(f\'f.readable():{f.readable()}\')  #判断文件是否可读
data1=f.readline()
data2=f.readlines()
print(f\'data1:{data1}\')
print(f\'data2:{data2}\')
f.close()

f.readable():True
data1:112345678924567890234678167890112345670987876098765430987654

data2:[\'\n\', \'\n\', \'\n\', \'航空市场黁SVN语言女你有碎是U盘苏怒政府采购吃什么哄你们\'] #\转义字符,换行作用

文件打开模式之w模式

w:只能写,不能读,文件存在的时候会清空文件后,再写入内容,文件不存在的时候会创建文件后,再写入文件。

# wt
f=open(r\'F:\FTP.txt\',mode=\'wt\',encoding=\'utf8\')
print(f\'f.readable():{f.readable()}\')
f.write(\'今天是一个美好的日子,可惜不在黑夜,鸟不在鸣叫,交通不在拥堵。\n\')
f.write(\'我今天没去金山寺\n\')
f.write(\'最初的相遇 最后的别离,期待相遇与别离。\')
f.flush()
f.close()
f=open(r\'F:\FTP.txt\',mode=\'rt\',encoding=\'utf8\')
data=f.read()
print(data)
f.flush()
f.close()

f.readable():False
今天是一个美好的日子,可惜不在黑夜,鸟不在鸣叫,交通不在拥堵。
我今天没去金山寺
最初的相遇 最后的别离,期待相遇与别离。
# wb
f=open(r\'F:\FTP.txt\',mode=\'wb\')
f.write(\'今天是一个美好的日子,可惜不在黑夜,鸟不在鸣叫,交通不在拥堵。\n\'.encode(\'unicode_escape\'))            #编码成bytes类型
f.write(\'我今天没去金山寺\n\'.encode(\'unicode_escape\'))
f.write(\'最初的相遇 最后的别离,期待相遇与别离。\'.encode(\'unicode_escape\'))
f.flush()
f.close()
f=open(r\'F:\FTP.txt\',mode=\'rt\',encoding=\'utf8\')
data=f.read()
print(data)
f.flush()
f.close()

\u4eca\u5929\u662f\u4e00\u4e2a\u7f8e\u597d\u7684\u65e5\u5b50\uff0c\u53ef\u60dc\u4e0d\u5728\u9ed1\u591c\uff0c\u9e1f\u4e0d\u5728\u9e23\u53eb\uff0c\u4ea4\u901a\u4e0d\u5728\u62e5\u5835\u3002\n\u6211\u4eca\u5929\u6ca1\u53bb\u91d1\u5c71\u5bfa\n\u6700\u521d\u7684\u76f8\u9047 \u6700\u540e\u7684\u522b\u79bb\uff0c\u671f\u5f85\u76f8\u9047\u4e0e\u522b\u79bb\u3002

文件打开模式之a模式

a:可以追加。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。

f=open(r\'F:\FTW.txt\',mode=\'at\',encoding=\'utf8\')
f.write(\'今天是一个美好的日子,可惜不在黑夜,鸟不在鸣叫,交通不在拥堵。\n\')
f.write(\'我今天没去金山寺\n\')
f.write(\'最初的相遇 最后的别离,期待相遇与别离。\n\')
f.close()
f=open(r\'F:\FTW.txt\',mode=\'rt\',encoding=\'utf8\')
data=f.read()
print(data)
f.flush()
f.close()

今天是一个美好的日子,可惜不在黑夜,鸟不在鸣叫,交通不在拥堵。
我今天没去金山寺
最初的相遇 最后的别离,期待相遇与别离。
今天是一个美好的日子,可惜不在黑夜,鸟不在鸣叫,交通不在拥堵。
我今天没去金山寺
最初的相遇 最后的别离,期待相遇与别离。

文件打开模式之b模式

b模式是通用的模式,因为所有的 文件在硬盘中都是以二进制的形式存储的,需要注意的是:b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码。

版权声明:本文为zuihoudebieli原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zuihoudebieli/p/10940143.html