• file 文件处理


     python文件处理

    #写文件
    >>> f=open("test.log","w")   #"w"写入模式
    >>> f.write("test line
    ") 
    10
    >>> f.write("test line2")
    11
    >>> f.close()    #操作完毕记得关闭文件!
    #读文件
    >>> f=open("test.log","r")  #"r"只读模式
    >>> print(f.read())
    test line
    test line2
    >>> f.close()    #关闭文件对象

    文件句柄 f = open('文件路径', '模式',encoding='编码') 

    文件编码 encoding:

     open() 文件是由操作系统打开,如果没有手动设置编码,那么默认操作系统会用自己的编码去打开文件,在linux下是utf-8,windows下是 gbk。

    打开模式:

    • r  只读模式(默认),文件必须存在,否则会抛异常
    • w  写入模式,需要注意:若文件已存在,会覆盖掉原来的内容!
    • x  写入模式,若文件已存在,会报异常
    • a  追加。不存在则创建,存在就追加
    • t  文本模式打开 (默认)。 open()函数默认的打开模式是'rt'
    • b  以二进制读文件。对于非文本文件,使用b模式,“b”表示以字节的方式操作
    • +  可读写模式

    文件对象的方法:

    • f.close()   回收操作系统打开的文件
    • f.read([size=-1])      size未指定则读取整个文件,读取到的是字符串
      # f.read(10)
      如果文件以t(文本模式)打开,则读取10个字符
      若文件以b(二进制模式)打开,则读取10个字节
      # f.read()
      >>> f = open('a.txt','r')
      >>> data = f.read().strip()
      >>> data
      'test line1
      test line2'
      >>> print(data)
      test line1
      test line2
      >>> f.close()
    • f.readline([size=-1])    每次读一行内容,所以,读取时占用内存小,比较适合大文件
      >>> f = open('a.txt')
      >>> f.readline()
      'test line1
      '
      >>> f.readline()
      'test line2
      '
      >>> f.readline()
      ''
      >>> f.readline()
      ''
      >>> f.close()
    • f.readlines([size=-1])    读取整个文件所有行,保存在一个列表中,每行作为一个元素
      >>> f=open("a.txt")
      >>> data=f.readlines()
      >>> f.close()
      >>> data
      ['test line1
      ', 'test line2
      ', '
      ']   #读取到的是一个列表
      >>> for line in data:
      ...     print(line.strip())
      ... 
      test line1
      test line2
    • f.tell()     返回当前文件指针的位置
      >>> f=open('record.txt')
      >>> f.read(5)
      '小客服:小'
      >>> f.tell()
      13

        

    • f.seek(offset,from) 移动光标, 从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
      # cat a.txt
      test line1
      test line2
      >>> f=open("a.txt")
      >>> f.seek(8)  #把光标移到第8个字符的后面
      8
      >>> f.tell()
      8
      >>> f.read()
      'e1
      test line2
      '
      >>> f.close()
    • f.truncate([size=file.tell()])    从文件的首字符开始截断 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除。文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
      >>> f=open('a.txt','r+')  #文件打开必须是可写的,在r+或a或a+模式下测试
      >>> f.truncate(8)
      8
      >>> f.read() 
      'test lin'
      >>> f.tell()
      8
      >>> f.close()
    • f.write(str)      将字符串str写入文件,返回写入的字符串长度
    • f.writelines(seq)   向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
      >>> l = ['hello
      ','world
      ']
      >>> f=open("test.log","w")
      >>> f.writelines(l)
      >>> f.close()
      # cat test.log
      hello
      world

    with管理上下文

    为了防止文件操作完忘记执行 f.close()来关闭文件,可以使用with 关键字来管理上下文, 当with代码块执行完毕时,内部会自动关闭并释放文件资源。

    >>> with open('server.py') as f:
    ... for i in f:
    ... print(i.strip())
    ...
    
     #with还支持同时对多个文件的上下文进行管理
    
    >>> with open('a.txt','r') as obj1,open('b.txt','w') as obj2:
    ... data = obj1.read()   # 文件较大时,应使用for循环一行一行的读取, for i in obj1: obj2.write(i)
    ... obj2.write(data)
    ... 
    4

    修改文件内容:

    import os
    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
        for line in read_f:
            line=line.replace('test','xxxx')
            write_f.write(line)
    os.rename('.a.txt.swap','a.txt') 
    os.remove('a.txt')

    把一个文件的内容插入到另一个文件某个指定字段的前面

    #!/usr/bin/python3
    with open('add.txt','r') as obj1,open('filebeat.yml','r') as obj2:
        add_content = obj1.read()
        content = obj2.read()
    pos = content.index('output.kafka:')
    
    contents = content[:pos] + add_content + content[pos:]
    with open('filebeat.yml','w') as f:
        f.write(contents)
  • 相关阅读:
    一个项目需要提交哪了些文档?
    aspose.cells
    国内人才申领《上海市居住证》审核试行办法
    SPRING.NET 1.3.2 学习1组件功能说明
    Nhibernate中实现多数据库支持
    Asp.net Mvc 实用技巧
    windwos server 2008 r2安装,一些最基本设置需要注意的地方
    配置SQL Server的身份验证方式
    MindManager 2012 简介(安装)
    Git 管理篇章
  • 原文地址:https://www.cnblogs.com/xiaobaozi-95/p/9554796.html
Copyright © 2020-2023  润新知