文件操作

Posted aries-zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件操作相关的知识,希望对你有一定的参考价值。

绝对路径:盘符开头并精确到目标文件,例如:f:试用实验.txt

相对路径:当前目录下的文件,例如:实验.txt

文件操作

ps:操作完成后一定要结束操作,使用s.close,避免持续占用内存空间。

open()     open(“绝对路径或相对路径”,“模式”,“编码格式”)

r——只读:只是读取文件,不作任何更改。

s = open("f:试用实验.txt",mode="r",encoding="utf-8")
q = s.read()
print(q)
s.close()

w——只写:若没有文件就创建文件,然后写入;若已有,那便清空内容重新写入。

s = open("f:试用实验.txt",mode="w",encoding="utf-8")
s.write("你好世界")
s.close()

a——追加:在已有的文件的内容后面追加新的内容。

s = open("f:试用实验.txt",mode="a",encoding="utf-8")
s.write("你好世界")
s.close()

 

操作非文字(图片,视频或其他)类型的文件时用bytes

rb——用byte数据类型读取文件

s = open("f:试用实验.txt",mode="rb")
content = s.read()
print(content)    #输出的内容按byte类型输出,b’字母还是字母,中文用十六进制表示
s.close()

wb——用byte数据类型写入文件

s = open("f:试用实验.txt",mode="wb")
s.write("你好世界".encode("utf-8"))  #byte数据类型使用除了Unicode之外的数据类型进行储存
s.close()

ab——用byte数据类型追加写入

s = open("f:试用实验.txt",mode="ab")
s.write("你好世界".encode("utf-8"))
s.close()

双功能:

r+——读写,先读取文件,然后在文件内容后追加新的内容

s = open("f:试用实验.txt",mode="r+",encoding="utf-8")
print(s.read())
s.write("阿瑞斯")   #在r+模式下,此步骤可不写,运行程序后会表现为只读,不会报错
s.close()

如果在r+的模式下,先进行写然后再读取(将上面的中间两行代码互换)运行结果就会成为:输入n个字符就会从头开始覆盖原内容的n个字符(不是插入,也不是一次性删除所有内容然后写入)而读取的是未覆盖的内容,若新的字符将原字符完全覆盖,那么读取内容为空。

w+——写读,先将原内容清空,然后写入,并且毛都不会读出来,因为之前的操作已经将光标移动到末尾了(不常用)

用调光标【s.seek(0)括号内为字符索引,若为0便是将光标移到开头】的方法可以读取(详见a+的使用方法的演示代码)

s = open("f:试用实验.txt",mode="w+",encoding="utf-8")
s.write("你好世界,nihaoma")
print(s.read())
s.close()

a+——追加读取,先在原有的内容上追加新的内容,然后再读取,毛都读不出来,原因同上,解决方法同上

s = open("f:试用实验.txt",mode="a+",encoding="utf-8")
s.write("你好世界")
s.seek(0)   #将光标移动到内容开头
print(s.read())
s.close()

操作非文字(图片,视频或其他)类型的文件时用bytes

r+b :使用bytes类型读写 ;w+b;使用bytes类型写读   a+b :使用bytes类型追加读取;

 

操作方法详解

read():读取,读取出来的都是字符,在括号内设定数字几,就可以设定读取多少字符。例如read(3)便是读取文件内容的3个字符

seek():定光标,按字节,括号内设定多少就是将光标定到那个字节的后面,例如Python3的字符是用Unicode进行储存的,每3个字节代表一个中文字符,若s.seek(3),那么光标将会定到文件内容的第一个中文字符的后面(不同的编码方式,每种字符的字节各不相同,使用前先看好)

tell():输出光标的位置

readable():是否可读(返回布尔值True、False)

readline():一行一行读

readlines():输出为列表,每一行当成列表中的一个元素,添加到列表中

truncate():对原文件进行截取,括号内若为5,那便截取原文件的前5个字符,其余清空。

想打印文件内容可以用for循环:先用open打开文件,然后循环变量(尽量别用这种方式,尤其是在不知道这个文件有多大时;尽量一行一行读)

为了避免忘记写close关闭文件,使其持续占用内存   或  想要一次性用不同的操作模式(mode)打开多个文件可以使用:

原代码:s = open(路径,mode,encoding)

with    open(路径,mode,encoding)     as     变量名(s)      #文件操作完成后自动关闭 

with    open(路径,mode,encoding)     as     变量名(s) ,with    open(路径,mode,encoding)     as     变量名(f)    #打开多个文件,有缩进

 

以上是关于文件操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode 如何操作用户自定义代码片段(快捷键)

代码片段 - Golang 实现集合操作

Apollo Codegen 没有找到生成代码的操作或片段

VSCode自定义代码片段——.vue文件的模板

操作栏标签片段中的片段?