文件操作

文件操作的几种模式:

打开文件的两种写法:

1)需要操作完毕,手动关闭文件夹

f=open("bixu.txt",mode="r+",encoding="utf-8")
f.flush()  #刷新
f.close()    #关闭文件夹

2)不需要手动关闭文件夹

def alex():
with open("emp.db",mode="r",encoding="utf-8")as f,
        open("bixu_副本.txt",mode="w+",encoding="utf-8")as f1:
        str = f.readline()
        print(str)
        print(type(str))
        return #文件操作完毕了,直接结束函数
r,r+,w,w+,a,a+,rb,wb,ab,r+b,w+b,a+b

f.close()#关闭句柄

f.flush()#刷新

f.readlines() #读取全部,每一行是个字符串,最后返回到一个列表中

f.readline()  #读取一行,返回个字符串

tell()  ,print(f.tell())   #报告光标现在的位置

truncate(n)  #截断,如果给参数,从头截断到参数位置

seek(y,x)    #移动光标的方法,x有三个值,0,1,2,分别代表开头,现在位置,末尾;
y代表的是移动多少字节符,一个中文3个字节符,英文都是1个

 

r+ 模式下,如果读取了内容,不论读取内容多少,光标显示的是多少,在写入或着操作文件的时候都是在结尾进行的操作.!

一.只读模式(r,rb)   #rb读出来的是bytes类型,再rb模式下,不能选择encoding

  1)read()  #全部读.  |  read(5)   #读取5个字符

2)rb    #读取出来的内容是字节码串,此类后面跟b的模式,可以不指定打开文件的编码,但写文件的时候必须将字符串指定转化成uft-8/gbk模式字节码
 rb的作⽤: 在读取非⽂本⽂件的时候. 比如读取MP3. 图像. 视频等信息的时候就需要⽤到
 rb. 因为这种数据是没办法直接显⽰出来的.在后⾯我们⽂件上传下载的时候还会⽤到.我们看的直播. 实际上都是这种数据.

.写模式(w,wb)     #如果没有文件,则会创建文件,如果文件存在,则将原文件内容删除,重新写入

    #wb模式下可以不指定打开文件的编码,但写文件的时候必须将字符串转化成为"utf-8"的bytes数据
.追加(a,ab)          #如果没有,就创建文件夹,写入的内容会追加在文件的结尾

.读写模式(r+,r+b)      #此模式必须是先读,后写入,因为光标默认在开头,读完了光标就到了文件末尾,写入才不会覆盖内容    

五.写读(w+,w+b)  #先将所有内容清空,后写入,最后读取,如果不主动移动光标到头,就会为空

六.追加读(a+)  #可创建文件夹,如果存在,追加写完,想读还允许移动光标读取,但是,不论读取内容多少,光标显示的是多少,想写入时,实际上都是在结尾进行的操作.!

模式    描述
t    文本模式 (默认)。
x    写模式,新建一个文件,如果该文件已存在则会报错。
b    二进制模式。
+    打开一个文件进行更新(可读可写)。
U    通用换行模式(不推荐)。
r    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+    打开一个文件用于读写。文件指针将会放在文件的开头。
rb+    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w    打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb    以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+    打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+    以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
1
file.close()
关闭文件。关闭后文件不能再进行读写操作。

2    
file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3    
file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4    
file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。

5    
file.next()
返回文件下一行。

6    
file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有。

7    
file.readline([size])
读取整行,包括 "
" 字符。

8    
file.readlines([sizeint])
读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。

9    
file.seek(offset[, whence])
设置文件当前位置

10    
file.tell()
返回文件当前位置。

11    
file.truncate([size])
截取文件,截取的字节通过size指定,默认为当前文件位置。

12    
file.write(str)
将字符串写入文件,返回的是写入的字符长度。

13    
file.writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

.其他操作:

seek(y,x)    #移动光标的方法,x有三个值,0,1,2,分别代表开头,现在位置,末尾;
y代表的是移动多少字节符,一个中文3个字节符,英文都是1个

tell()  ,print(f.tell())        #查看光标现在的位置

truncate()  #截断文件

lst.encode("utf-8")    #编码

lst.decode("utf-8")    #解码  注意:用什么码编的,就用什么码解,不然会乱码

 

八.覆盖(修改)文件

import os 
with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,
        open("⼩小娃娃_new", mode="w", encoding="UTF-8") as f2:    
    for line in f1:
        new_line = line.replace("⼤大⽩白梨梨", "冰糖葫芦")                
        f2.write(new_line) #因为用的是with操作,所以不用自己关
os.remove("⼩小娃娃")    # 删除源⽂文件 
os.rename("⼩小娃娃_new", "⼩小娃娃")     # 重命名新⽂文  

九,相对路径和绝对路径:

相对路径:相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字

  如果不在这个文件夹内. 可能需要出文件夹或者进文件夹

    出文件夹  ../

    进文件夹  文件夹/

绝对路径:从磁盘根目录寻找路径,一般只有在记录日志的时候可以用到绝对路径

十、文件操作的补充.

dirs = "C:\register作业"  #这个是你想在C盘创建的文件夹名字
if not os.path.exists(dirs):  #让系统判断,是否存在这样的文件夹名字,不存在就执行下面段代码
    os.makedirs(dirs)  #创建文件夹

                                                                                                                                                                       

原文地址:https://www.cnblogs.com/lgw1171435560/p/10073932.html