文件处理

什么是文件

一、文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口

用户/应用程序(open())

操作系统(文件)

计算机硬件(硬盘)


二、]为何要用文件

用户/应用程序可以通过文件将数据永久保存到硬盘中

即操作文件就是操作硬盘

用户/应用程序直接操作的是文件,对文件进行的所有的操作,都是在向操作系统发送系统调用,然后再由操作系统将其转换成具体的硬盘操作。


三、如何用文件:open()

控制文件读写内容的模式:t 和b

         T和 b 不能单独使用,必须跟r/w/a连用

         T文本默认的模式

1、读写都以str(unicode)为主的

2、 文本文件

3、  必须指定encoding=”utf-8”

B 二进制/bytes


四、控制文件读写的模式

R 只读模式,w只写模式 a 追加模式 +:r+ ,w+  ,a+

T:1、读写都是以字符串(unicode)为单位

   2、只能针对文本文件

   3、必须指定字符编码,即必须指定encoding参数

B:binary模式

[if !supportLists]1、  [endif]读写都是以bytes为单位

[if !supportLists]2、  [endif]可以什对所有文件

[if !supportLists]3、  [endif]一定不能指定字符编码,即一定不能指定encoding参数

总结:

         在操作纯文本文件方面t模式帮我们省去了编码与解码的环节,b模式则需要手动

编码与解码,所以此时t模式更为方便

         针对非文本文件(如图片、视频、音频等)只能使用b模式

         Withopen(r”a.txt”,”wb”) as f:        

                   f.write(“你好hello”.encode(“gbk”))


         withopen(r”f.txt”,”wb”) as f:

                   f.write(“你好hello”.encode(‘utf-8))


五、循环读取文件

         方式一:自己控制每次读取的数据量

                   Withopen(r’text.jpg,”rb”) as f:

                            Res= f.read(1024)

                            Iflen(res) == 0:

                                     Break

                            Print(len(res))

         方式二:以行为单位读,当一行内容过长时会导致一次性坊入内容的数据量过大

                   Withopen(r”a.txt’,”rt”,encoding=”utf-8”) as f:

                            Forline in f:

                                     Print(len(line),line)

                   Withopen(r’a.txt”,”rb”) as f:

                            Forline in f:

                                     Print(line)

                   Withopen(r”test.jpg”,”rb”) as f:

                            Forline in f:

                                     Print(line)


六、读相关操作

1、readline:一次读一行

With open(r”a.txt,”rt”,encoding=”utf-8”) asf:

         #Res1= f.readline()

         #Res2= f.readlinge()

         #Print(res2)

         WhileTrue:

                   Line= f.readline()

                   Iflen(line) == 0:

                            Break

                   Print(line)

2、readlines:

         Withopen(r”g.txt”,”rt”,encoding=”utf-8”) as f:

                   Res= f.readlines()

                   Print(res)

强调:f.read()与f.readlines()都是将内容一次性读入内存,如果内容过大会导到内存溢出


七、写相关操作

f.writelines():

with open(“h.txt”,”wt”,encoding=”utf-8”) asf:

         forline in l:

                   f.write(line)


八、控制指针移动

指针移动的单位都是以bytes/字节为单位

只有一种情况特殊:

         T模式下的read(n),代表的是字符个数

With open(“a,txt”,”rt”,encoding=”utf-8”) asf:

         Res= f.read(4)

         Print(res)

f.seek(n,模式):n指的是移动的字节个数

模式0:参照物是文件开头位置

f.seek(9,0) 指针在开头,移动到了9的字节位置

f.seek(3,0) 指针回到开头,移动到了3的字节位置

模式1:参照物是当前指针所在位置

f.seek(9,1) 当前位置到9的字节上

f.seek(3,1)        在9的字节上再移动3个字节,也就是到了12的位置

模式2:参照物是文件末尾位置,应该倒着移动

f.seek(-9,2) 

f.seek(-3,2)


注意:

只有在0模式可以在t下使用,1、2必须在b模式下用

示例:

         Withopen(“a.txt”,”rb”) as f:

                   f.seek(9,0)

                   f.seek(3,0)

                   print(f.tell())

                   f.seek(4,0)

                   res= f.read()

                   print(res.decode(“utf-8”))

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • #文件:通过python程序来对计算机的各种文件进行增删改查的操作 # #IO(Input/Output) # #...
    李烁_e500阅读 385评论 0 0
  • 文件读写文件读写部分,python有一个基本的内置文件读取函数openopen(filename, mode)其中...
    zhile_doing阅读 435评论 0 0
  • 文件IO常用操作 一般说IO操作,指的是文件IO,如果指的是网络IO,会直接说。 把文件存储到磁盘上的这个过程,叫...
    vampire6阅读 1,142评论 0 0
  • r和rb的区别是什么? rb是以二进制的形式打开,显示的是字符串。 而r是以文本的形式打开 解释一下以下三个参数的...
    飞鸟在笼阅读 575评论 0 2
  • 当我们提起一个坐拥财富的人时,我们都会觉得他一定是金钱富有的,可是一个金钱富有的人真的拥有财富吗? 财富实在是一个...
    爱丽丝的叮当兔阅读 421评论 0 1

友情链接更多精彩内容