文件操作
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) : #打开多个文件,有缩进
以上是关于文件操作的主要内容,如果未能解决你的问题,请参考以下文章