文件操作

文件基本操作

  • 保存内存中的数据都是易丢失的,只有保存在硬盘中才能持久的存储,保存在硬盘中的基本方法就是把数据写入文件中
  • 在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

  1. 创建io操作:
    import io
    sio = “io.StringIO()”
  2. 写入:
    sio.write(str(i))
  3. 读取:
    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

  1. 创建BytesIO:
    import io
    bio = io.BytesIO()
  2. 写入:
    bio.write(b"abcd")
  3. 读取:
    sio.getvalue()
  • BytesIO和StringIO类似,但是BytesIO操作的是Bytes数据
    import io
    bio = io.BytesIO()
    bio.write(b"abcd")
    print(type(bio.getvalue())) #<class ‘bytes’>

os模块提供Python和操作系统交互的接口

  1. 直接调用系统命令:
    os.system(“ls”)
  2. 通用路径操作:
    os.path
    os.path.join(r"/home/xiaoge",r"class_33")
  3. 文件目录操作:
    os.mkdir(“test”,“test1”)
    os.rename(“test”,“test1”)
  • os提供了Python和操作系用交互方式,只要是和操作系统相关,就可以尝试在os模块中找方法
    在这里插入图片描述

shutil高级文件操作

  • shutil模块提供了许多关于文件和文件集合的高级操作
  1. 移动文件
    shutil.move
  2. 复制文件夹
    shutil.copytree
  3. 删除文件夹
    shutil.rmtree
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值