• Python开发第四篇


    文件操作

    一、文件基本操作

    打开文件方法:open

    f = open("test",encoding="")

    r:只读模式(只能读取文件,不能做写操作,文件不存在时会报错)

    w:只写模式(只能做写操作不能做读操作,而且会清空文件后,写入,文件不存在时会自动创建)

    a:追加模式(在文件最后增加内容,只能写入,不能读取文件)

    rb:以二进制的方式读取文件,不能指定编码格式

    wb:以二进制的方式写入文件,不能指定编码格式

    ab:以二进制的方式追加,同样不能指定编码格式

    r+:读写模式,不会清空源文件,当只有wrire操作时,会从文件的开始地方进行覆盖写操作

    w+:写读模式,先清空源文件的内容,当写操作完成后,文件指针在最后一个字符的位置,读操作为空,需要指定指针位置才能读内容

    a+:追加读模式,不会清空源文件,追加操作完成后,也需要指定指针位置才能读取内容。

    不指定打开方式时默认为只读模式,不指定编码规则时,默认为系统的编码格式

    文件操作方法

    1、f.read()按字符读取所有内容,并返回一个内容的字符串形式,如果指定一个整形的参数,读取定长的内容,换行符作为一个字符

     1 f = open("test","r",encoding="utf8")
     2 a = f.read()#读取所有,返回的是字符串
     3 print(a)
     4 print(type(a))
     5 
     6 
     7 sunqilalalala
     8 1111
     9 22223
    10 tgsg
    11 <class 'str'>
    1 print(f.read(10))#读取10个字符
    2 
    3 sunqilalal

    2、f.readline()读取文件的一行

    1 print(f.readline())#每次只读取一行
    2 
    3 sunqilalalala

    3、f.readlines()读取文件的所有行,返回一个列表

    1 f = open("test","r",encoding="utf8")
    2 a = f.readlines()#一次读取所有行
    3 print(a)
    4 
    5 ['sunqilalalala
    ', '1111
    ', '22223
    ', 'tgsg']

    4、f.write()文件写操作,写入一个字符串到文件中,不会自动写入换行符

    1 f = open("test","w",encoding="utf8")
    2 f.write("sunqi
    ")#写操作会覆盖源文件,然后写入新的内容,文件不存在就会创建,需要手动添加换行
    3 a = f.write("你好
    ")#返回写入的字符的个数一般是字符串的长度
    4 f.write("hello
    ")
    5 print(a)
    6 f.close()

    5、f.writelines()写入一个元素为字符串的序列化对象,不会自动写入换行符

    1 f = open("test","w",encoding="utf8")
    2 
    3 b = f.writelines(["1","2","3","4"])#返回值为none
    4 print(b)
    5 f.close()

    6、f.tell()显示当前文件光标所在的位置

    7、f.seek()移动光标到指定位置

    1 f = open("test","a+",encoding="utf8")#每次对文件追加之后,文件指针都在最后,把指针置位零就可以正常读取了
    2 
    3 print(f.tell())
    4 f.seek(0)
    5 print(f.readlines())
    6 print(f.tell()) 

    f.seek(10,0)可以更改光标的位置(要求以b的方式发开)。默认从文件开始的位置计算

      0代表默认模式,可以不指定

      1代表相对模式

      2代表倒序模式

    8、ff.lush()将内存中的数据刷入到硬盘

    9、f.truncate()截取文件的部分内容然后覆盖的存储在文件中,要求只能以写的模式打开,但是不能是w,w+

    10、f.close()关闭文件操作

    11、应用:如何优雅快速读取大文件的最后一行?

     1 f = open("test","r")
     2 for i in f:
     3     offs = -10
     4     while True:
     5         f.seek(offs,2)#指针倒放,然后正常读取,当读取超过一行是data的长度为大于等于2,断定最后一行已经读完,取出即可
     6         data = f.readlines()
     7         if len(data)>1:
     8             print(data[-1])
     9             break
    10         else:#最后一行没读完或最后一行杠读完,不确定于是在扩大读的范围
    11             offs = offs * 2
  • 相关阅读:
    Net基础篇_学习笔记_第十一天_面向对象(静态与非静态 static)
    Net基础篇_学习笔记_第十一天_面向对象(类)
    Net基础篇_学习笔记_第十一天_面向对象(面向过程与面向对象的区别/类的概念)
    学习笔记_第十天_方法_方法的综合练习---ref练习
    学习笔记_第十天_方法_方法的重载与递归
    学习笔记_第十天_方法_方法的三个高级参数
    学习笔记_第十天_方法_方法的三个高级参数
    MySQL 添加用户、删除用户与授权
    linux composer 安装与应用
    Note1
  • 原文地址:https://www.cnblogs.com/SunQi-Tony/p/8697284.html
Copyright © 2020-2023  润新知