zoukankan      html  css  js  c++  java
  • python文件操作

    enumerate
    = open('lyrics',"r",encoding=""utf-8#文件句柄
    """
    对文件操作流程

    1 打开文件,得到文件句柄并赋值给一个变量
    2 通过句柄对文件进行操作
    3 关闭文件

    r,只读模式(默认)。
    w,只写模式。【不可读;不存在则创建;存在则删除内容;】,若是文件存在,再先清空文件在再进去;open for writing, truncating the file first
    a,追加写模式。【不存在则创建;存在则只追加内容;】open for writing, appending to the end of the file if it exists

    "+" 表示可以同时读写某个文件
    r+,可读写文件。【可读;可写;可追加】, 先读然后再追加不然会直接覆盖(用的最多的);若是文件不存在则不会创建文件,可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容,write时会从当前指针下写如数据;
    没有创建文件的功能
    但是实验发现,这里的r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容不完整。
    
    test.txt的原始文件如下:
    
    早上好
    您好
    how are you?
    如果我们在open文件后,没有进行任何读写,则从末尾加入
    
    1 with open('test.txt', mode='r+', encoding='utf-8') as f:
    2     f.writelines("北京")
    这时文件变成
    
    北京好
    您好
    how are you?
     
    
    如果我们在写之前进行了读操作,则会在末尾加入文件
    
    1 with open('test.txt', mode='r+', encoding='utf-8') as f:
    2     f.read(1)
    3     f.writelines("北京")
    这时在文件的末尾加入了北京两个字,与我们读多少没有关系。作用上类似a+模式
    
    早上好
    您好
    how are you?北京
    View Code

    如果我们在open文件后,没有进行任何读写,则从末尾加入
    w+,写读:没什么用)也是先把写的内容加到文件后面(会把原来的文件覆盖掉)
    如果以w+方式打开文件,写入文件后,文件被覆盖或重建,样例
    
    1 with open('test.txt', mode='w+', encoding='utf-8') as f:
    2     f.write("tianjin")
    3     f.flush()
    4     print(f.readlines())
    得到空[]
    
     
    
    with open('test.txt', mode='w+', encoding='utf-8') as f:
        f.writelines("天津")
        f.writelines('山东')
        f.flush()
        f.seek(0)
        print(f.readlines())
    需要seek才能读取到刚刚写入的内容。
    
     
    
    另外注意 写操作不会自动加入换行符
    
    读的一行末尾会有换行操作,可以用''.strip()去掉换行符
    
    with open('test.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            print(line.strip()) 去掉换行
     
    
    如果某个文件正在open,就只这时,文件被修改,正在读文件的句柄能读出修改的内容
    
    1 import time
    2 with open('test.txt', mode='r', encoding='utf-8') as f:
    3     time.sleep(5)
    4     for line in f:
    5         print(line.strip())
    在文件末尾增加文件时,我们的f能读取到最后新增的内容。如果修改已经读取行的内容,若不seek,则读取不到。
    
    这特点能用户增量读取分析日志文件
    w+

    a+,追加然后加上读的功能

    "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

    • rU
    • r+U

    rb 二进制读取文件

    "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
    rb
    wb
    ab

    为了避免打开文件后忘记关闭,可以通过管理上下文
    在Python 2.7 后,with又支持同时对多个文件的上下文进行管理
    with open('log1') as obj1, open('log2') as obj2:
    pass-

    当with代码块执行完毕时,内部会自动关闭并释放文件资源

    for line in f: #这时f为一个迭代器的东西;高效的循环方法
      print(line) #一行行的读,并且内存中只保存一行;效率最高

    常用方法
    read() #可以设置长度读取文件所有内容并返回字符串,注意,不一定能全读回来::Read at most n characters from stream 
    Read at most size bytes, returned as bytes不能这样操作,占用内存太大,当文件非常大时,要一行一行的读文件,要用for 循环
    with open("format_test.py","r+") as fp: #要以这种方式读取整个文件,占用内存最少
    for i in fp:
    print(i)

    readline() #读取一行
    __next__() #读取下一行: fp.__next__()
    readlines() #读取所有内容,并返回列表(一行为列表的一个元素值):Read and return a list of lines from the stream:不能这样操作,占用内存太大;一次将内容读取
    write() #写一行数据以unicode Write the unicode string s to the stream and return the number of characters written.
    writelines(list) #写多行,参数为列表,列表中字符串需要换行,不然会写进一行:Write a list of lines to the stream
    seek() #句柄指针操作,到达某个位置,用于移动文件读取指针到指定位置
    tell() #获取当前句柄指针位置;按照字符的个数
    truncate() #截取文件句柄头到当前位置的字符串,返回None;从头开始截断,若有输入,则从指定位置开始截取,即删除
    flush() #强制刷新到硬盘
    seekable()# Return True if the stream supports random access;终端类型文件不可返回
    writeable() #Return True if the stream supports writing
    name #print(fp.name)返回文件名
    """
    a=["asfdasd","asdfasdf","333333333"]
    with open("format_test.py","w+") as fp:
    print(fp.read())
    fp.write("asdf ")
    print(fp.name)

    for i in range(50): #进度条
      sys.stdout.write("q")
      sys.stdout.flush()
      time.sleep
  • 相关阅读:
    一、区块链,这次不容错过
    二、常用固件升级
    2.监控利器nagios手把手企业级实战第一部
    四、NOSQL之Redis持久化缓存服务基础实战第三部
    三、NOSQL之Memcached缓存服务实战精讲第二部
    linux重装docker-compose后无法执行docker-compose命令
    mongodb启用auth,使用密码登录
    Vue的三个点es6知识,扩展运算符
    关于同一台服务器上两个PHP项目相互访问超时的问题
    ffmpeg生成视频封面图
  • 原文地址:https://www.cnblogs.com/x2x3/p/9979919.html
Copyright © 2011-2022 走看看