python文件操作

文件操作

文件打开
  • Python内置了一个open()方法,用于对文件进行读写操作。使用open()方法可以分三步走,一是打开文件,二是操作文件,三是关闭文件。
  • 文件句柄/文件描述符
    • open()方法的返回值是一个file对象,可以将它赋值给一个变量,这个变量就是所谓的文件句柄。
    • file对象:
      • 可以调用read()和write()方法,对打开的文件进行读写操作。
  • open方法的语法
    • f = open(filename, mode)
      • filename:
        • 一个包含了你要访问的文件名称的字符串值,通常是一个文件路径。
        • 文件路径作用:定位到指定文件
      • mode:
        • 打开文件的模式,有很多种,默认是只读方式r。
  • 常规文件打开模式操作演示
    • b模式:
      • 二进制模式,通常用来读取图片、视频等二进制文件。注意,它在读写的时候是以bytes类型读写的,因此获得的是一个bytes对象而不是字符串。在这个读写过程中,需要自己指定编码格式。在使用带b的模式时一定要注意传入的数据类型,确保为bytes类型。
    • +模式:
      • 对于w+模式,在读写之前都会清空文件的内容,建议不要使用!
      • 对于a+模式,永远只能在文件的末尾写入!
      • 对于r+模式,也就是读写模式,配合seek()和tell()方法,可以实现更多操作。
  • 编码问题
    • 要读取非UTF-8编码的文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件
    • 遇到有些编码不规范的文件,可能会抛出UnicodeDecodeError异常,这表示在文件中可能夹杂了一些非法编码的字符。遇到这种情况,可以提供errors=’ignore‘参数,表示如果遇到编码错误后如何处理。
文件对象操作
  • 每当我们用open方法打开一个文件时,将返回一个文件对象。这个对象内置了很多操作方法。

  • f.read(size) #size读取数据的个数

    • 读取一定大小的数据, 然后作为字符串或字节对象返回。size是一个可选的数字类型的参数,用于指定读取的数据量。当size被忽略了或者为负值,那么该文件的所有内容都将被读取并且返回。
    • 注意:
      • 如果文件体积较大,请不要使用read()方法一次性读入内存,而是read(512)这种一点一点的读。
  • f.readline()

    • 从文件中读取一行n内容。换行符为’\n’。如果返回一个空字符串,说明已经已经读取到最后一行。这种方法,通常是读一行,处理一行,并且不能回头,只能前进,读过的行不能再读了。
  • f.readlines()

    • 将文件中所有的行,一行一行全部读入一个列表内,按顺序一个一个作为列表的元素,并返回这个列表。readlines方法会一次性将文件全部读入内存,所以也存在一定的风险。但是它有个好处,每行都保存在列表里,可以随意存取。
  • #需求:读取文件中的数据
    fp = open('./test.txt','r')
    text = fp.read(10) #读取指定字节的数据
    text_line = fp.readline() #一次读取一行数据
    text_lines = fp.readlines() #读取多行数据,返回一个列表
    print(text_lines)
    fp.close()
    
  • 总结:

    • 几种不同的读取和遍历文件的方法比较:如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便。普通情况,使用for循环更好,速度更快。
  • f.write()

    • 将字符串或bytes类型的数据写入文件内。write()动作可以多次重复进行,其实都是在内存中的操作,并不会立刻写回硬盘,直到执行close()方法后,才会将所有的写入操作反映到硬盘上。在这过程中,如果想将内存中的修改,立刻保存到硬盘上,可以使用f.flush()方法。

    • fp = open('./test123.txt','w')
      fp.write('hello xiaoshuai')
      fp.close() #将文件内容清空,在写入新数据
      
      
    • fp = open('./test123.txt','a')
      fp.write('hello xiaoshuia')
      fp.close() #在文件数据末尾追加数据
      
      
  • fp.tell()

    • 返回文件读写指针当前所处的位置,它是从文件开头开始算起的字节数。一定要注意了,是字节数,不是字符数。

    • fp = open('./test123.txt','w')
      # fp.write('hello bobo')
      print(fp.tell())
      fp.close()
      
  • fp.seek()

    • 如果要改变文件指针的位置, 可以使用fp.seek(offset, from_what)方法。seek()经常和tell()方法配合使用。

    • from_what

      • 如果是0表示从文件开头计算
      • 如果是1表示从文件读写指针的当前位置开始计算
      • 2表示从文件的结尾开始计算,默认为0
    • offset:表示偏移量

      • seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字节
      • seek(x,1) : 表示从当前位置往后移动x个字节
      • seek(-x,2):表示从文件的结尾往前移动x个字节
      fp = open('./test.txt','r')
      fp.seek(9,0)
      text = fp.read(5)
      print(text)
      fp.close()
      
  • f.close( )

    • 关闭文件对象。当处理完一个文件后,调用f.close()来关闭文件并释放系统的资源。文件关闭后,如果尝试再次调用该文件对象,则会抛出异常。
with关键字

​ with关键字用于Python的上下文管理器机制。为了防止诸如open这一类文件打开方法在操作过程出现异常或错误,或者最后忘了执行close方法,文件非正常关闭等可能导致文件泄露、破坏的问题。Python提供了with这个上下文管理器机制,保证文件会被正常关闭。在它的管理下,不需要再写close语句。注意缩进。

with open('./test123.txt','r') as fp: #fp = open()
    text = fp.read(5)
print(text)

#上下两组代码功效一样
fp = open('./test123.txt','r')
text = fp.read(5)
print(text)
fp.close()
  • 对图片,音频,视频,压缩包等二进制的数据进行文件读写操作

    • 实现一个图片文件的拷贝

      • 1.打开一个图片文件,读取其二进制的数据

      • 2.将读取到的数据写入到另一个路径下

      • fp = open('demo.jpg','rb') #r是读取文本数据,rb是读取二进制数据
        img_data = fp.read() #读取到了图片的二进制数据
        
        #将图片的二进制数据写到另一个路径下
        fp1 = open('demo.jpg','wb')
        fp1.write(img_data)
        
        fp.close()
        fp1.close()
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acmakb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值