文章目录
文件基本操作
- 保存内存中的数据都是易丢失的,只有保存在硬盘中才能持久的存储,保存在硬盘中的基本方法就是把数据写入文件中
- 在Python中文件的打开与关闭变得十分简单便捷,文件在关闭的时候会自动保存
- io操作方法
- 打开文件,或者新建一个文件
- 读/写数据
- 关闭文件
打开文件open
-
open()函数用于打开一个文件,创建或者打开一个file对象,相关的方法才可以调用它进行读写
-
如果不加路径就表示绝对路径,表示在当前文件夹进行
open(文件路径,“操作”)/open("文件名","操作")
-
w:写入并覆盖
-
a:在后面追加内容
-
r:读取
path = r'/home/xiaoge/class_33/test.txt'
file = open(path,'w') #w:写入并覆盖 如果没有这个文件就会新建一个
file.write("hello")
file = open(path,'a') #a:追加
file.write("world") #write(写入的必须是字符串)
file = open(path,'r') #r:读取
print(file.read())
readline:读一行
file.writelines("hello\nworld")
file = open(path,'r') #r:读取
print(file.readline()) #hello 只读一行,下一行的worl读不到
print(file.readline(2)) #he读前两个字符
readlines:返回列表形式
file.writelines("hello\nworld")
file = open(path,'r') #r:读取
print(file.readlines()) #['hello\n', 'world']
print(file.readlines(2)) #读前两行
b:二进制数据
file = open(path,'b')
#b:二进制数据
rb:读二进制
wb:写二进制
ab:以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,如果该文件不存在,创建新文件进行写入
writelines
file.writelines("hello\nworld") #写入多行,其实write也可以一样效果
file.writelines(["hello world","haha"])
#['hello worldhaha']写多个字符串,用列表括起多个字符串,write不行
w+:写读
path = r'/home/xiaoge/class_33/test.txt'
file = open(path,'w+') #w+:写读
file.write("hi")
print(file.read()) #什么都读不出,因为写读之后光标在最后,再读就读不出来了
-调皮的分隔线----------------------------------------------------------------------------------
path = r'/home/xiaoge/class_33/test.txt'
file = open(path,'w+') #w+:写读
file.write("hi")
file.seek(0) #指针移回最前面
print(file.read()) #hi
#r+:打开一个文件用于读写,文件指针将会放在文件开头
w+:打开一个文件用于读写,如果该文件已存在则将其覆盖,如果该文件不存在,创建新文件
a+:打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾,文件打开会是追加模式,如果该文件不存在,创建新文件用于读写
rb+:以二进制格式打开一个文件用于读写,文件指针将会放在文件的开头
wb+:以二进制格式打开一个文件用于读写,如果该文件已存在则将其覆盖,如果该文件不存在,创建新文件
ab+:以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,如果该文件不存在,创建新文件用于读写
tell:返回该文件中读出的文件/写指针的当前位置
path = r'/home/xiaoge/class_33/test.txt'
file.write("hi")
print(file.tell()) #2
file = open(path,'a') #a:追加
file.write("world")
print(file.tell()) #7
file = open(path,'r') #r:读取
print(file.read()) #hiworld
close:关闭文件
file.close() #文件打开弄完之后一定要关闭
上下文管理
with
path = r'/home/xiaoge/class_33/test.txt'
with open(path,"r") as f:
print(f.read()) #with能够自动关闭文件,不需要执行close方法
上下文管理
import time
class RunTime:
def __enter__(self):
self.start_time = time.time()
return self.start_time
def __exit__(self, exc_type, exc_val, exc_tb):
self.end_time = time.time()
self.run_time = self.end_time - self.start_time
print("Time consuming %s seconds" % self.run_time)
with RunTime():
for i in range(1000000):
pass #Time consuming 0.08562612533569336 seconds
- 通过这两个方法可以方便的实现上下文管理,会把with__enter__的返回值赋值给as后的变量
- enter:进入时需要执行的代码,相当于准备工作
- exit:退出时需要执行的代码,相当于收尾工作
io流
- i:input/输入
- o:output/输出
StringIO
- 创建io操作:
import io
sio = “io.StringIO()” - 写入:
sio.write(str(i)) - 读取:
sio.getvalue()-
当创建StringIO调用close()方法时,在内存中的数据会被丢失,在内存中如同打开文件一样操作字符串,因此也有文件的很多方法
import io sio = io.StringIO() sio.write("abc") sio.seek(0) #同前面,指针 print(sio.read()) #用print(sio.getvalue())就不用sio.seek(0) sio.close() #abc
-
BytesIO
- 创建BytesIO:
import io
bio = io.BytesIO() - 写入:
bio.write(b"abcd") - 读取:
sio.getvalue()
- BytesIO和StringIO类似,但是BytesIO操作的是Bytes数据
import io
bio = io.BytesIO()
bio.write(b"abcd")
print(type(bio.getvalue())) #<class ‘bytes’>
os模块提供Python和操作系统交互的接口
- 直接调用系统命令:
os.system(“ls”) - 通用路径操作:
os.path
os.path.join(r"/home/xiaoge",r"class_33") - 文件目录操作:
os.mkdir(“test”,“test1”)
os.rename(“test”,“test1”)
- os提供了Python和操作系用交互方式,只要是和操作系统相关,就可以尝试在os模块中找方法
shutil高级文件操作
- shutil模块提供了许多关于文件和文件集合的高级操作
- 移动文件
shutil.move - 复制文件夹
shutil.copytree - 删除文件夹
shutil.rmtree