一、文件打开-模式
不同模式打开文件操作说明:
个人觉得需要熟知的:
- + :可读、可写。
- r :读,指针在开头。不会创建文件。
- r+ :读、写,指针在开头。不会创建文件。写内容在结尾累加。
- w :写、创建、覆盖,指针在开头。从开头开始编辑,即原有内容会被删除。
- w+ :读、写、创建、覆盖,指针在开头。从开头开始编辑,即原有内容会被删除。
- a :写、创建,指针在结尾。用于追加。新的内容将会被写入到已有内容之后。
- a+ :读、写、创建,指针在结尾。用于追加。新的内容将会被写入到已有内容之后。
需要了解的:
- t :文本模式 (默认)
x :写模式,新建一个文件,如果该文件已存在则会报错。
b :二进制模式。
U :通用换行模式(不推荐)。
rb :类似r模式,只是以二进制格式打开。一般用于非文本文件如图片等。
rb+:类似r+模式,只是以二进制格式打开。一般用于非文本文件如图片等。
wb :类似w模式,只是以二进制格式打开。一般用于非文本文件如图片等。
wb+:类似w+模式,只是以二进制格式打开。一般用于非文本文件如图片等。
ab :类似a模式,只是以二进制格式打开。一般用于非文本文件如图片等。
ab+:类似a+模式,只是以二进制格式打开。一般用于非文本文件如图片等。
二、File对象的系列文件操作
文件操作open函数理解:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
#file: 必需,文件路径(相对或者绝对路径)。
#mode: 可选,文件打开模式
#buffering: 设置缓冲
#encoding: 一般使用utf8
#errors: 报错级别
#newline: 区分换行符
#closefd: 传入的file参数类型
#opener:可以通过调用*opener*方式,使用自定义的开启器。底层文件描述符是通过调用*opener*或者*file*, *flags*获得的————目前没搞懂这个参数的作用
直接上操作例子:
fil=open("2.txt","r+") # 读写模式a,a+在文件结尾追加;w、w+在文件开头,原有信息会被删除;有文件则读写,无文件则创建
str1=fil.read(2) # read(2)当前位置向后读取两字节内容
print("写操作前读去内容:",str1," 指针当前位置:",fil.tell()) # tell()或者当前位置
fil.write("0123456789q") # write()写操作
fil.write("mmn")
print("写操作完成后,指针当前位置:",fil.tell())
print()
print("\n文件名称:",fil.name)
print("文件操作模式:",fil.mode)
print("文件操作是否关闭状态:",fil.closed)
print()
fil.close()
print("关闭文件操作后,文件操作关闭状态:",fil.closed)
写操作前读去内容: 指针当前位置: 0
写操作完成后,指针当前位置: 14
文件名称: 2.txt
文件操作模式: r+
文件操作是否关闭状态: False
写操作前读去内容,读取长度2: 34 from设为0,移动3,指针当前位置: 5
seek()函数可以将指针指向指定位置,seek(offset [,from])
说明:from为1或2时,文件需是按二进制文件模式打开:
fil=open("2.txt","rb+")
print("文件读取内容:",fil.read())
# seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
# from为0将指针重新定位文件开头
fil.seek(3,0)
print("写操作前读去内容,读取长度2:",fil.read(2)," from设为0,移动3,指针当前位置:",fil.tell())
# from设为1,则使用当前的位置作为参考位置。
fil.seek(3,1)
print("from设为1,移动3,指针当前位置:",fil.tell())
# from被设为2,那么该文件的末尾将作为参考位置
fil.seek(-3,2)
print("from设为2,移动3,指针当前位置:",fil.tell())
fil.close()
print("关闭文件操作后,文件操作关闭状态:",fil.closed)
文件读取内容: b'0123456789qmmn'
写操作前读去内容,读取长度2: b'34' from设为0,移动3,指针当前位置: 5
from设为1,移动3,指针当前位置: 8
from设为2,移动3,指针当前位置: 11
关闭文件操作后,文件操作关闭状态: True
文件内容读取补充
import sys
fil=open("2.txt","r+")
print ("读取整行的数据为: ",fil.readline())
print ("读取下一行的数据为: ",fil.__next__())
print ("read读取的数据为: ",fil.read())
# 重新设置文件读取指针到开头
fil.seek(0, 0)
lines = fil.readlines()
print ("lines读取的数据为: %s" % (lines))
print ("lines[2]读取的数据为: ",lines[2]) # 从0开始算位,即2则是第三个数
print ("lines读取的数据行数为: ",lines.__len__())
for idx in lines:
sys.stdout.write(idx)
# print(idx.replace('\n',''))
print()
print ("位置:",fil.tell())
fil.close()
文件内容:
a6
b5
c4
d3
e2
f1
g7
运行结果:
读取整行的数据为: a6
读取下一行的数据为: b5
read读取的数据为: c4
d3
e2
f1
g7
lines读取的数据为: ['a6\n', 'b5\n', 'c4\n', 'd3\n', 'e2\n', 'f1\n', 'g7']
lines[2]读取的数据为: c4
lines读取的数据行数为: 7
a6
b5
c4
d3
e2
f1
g7
位置: 26
三、OS对象提供对文件目录操作
import os
# 重命名文件
os.rename("readT.txt","2.txt")
# 删除文件
os.remove("1.txt")
# 创建文件夹3
os.mkdir("3")
# 获取当前目录
print(os.getcwd())
# 修改当前目录
os.chdir("D:\3")
# rmdir()方法删除目录,目录名称以参数传递。
os.rmdir("3")