zoukankan      html  css  js  c++  java
  • Python----文件的IO操作

    一、文件操作

    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

      打开文件

      假设我们有一个file.txt文件,内容为:

    abcdefg
    jijklmn
    opqtsr
    uvwxyz
    # Author:Tim Gu
    data = open('file.txt',encoding="utf-8").read()
    print(data)

    输出:

    abcdefg
    jijklmn
    opqtsr
    uvwxyz

      读文件:

    # Author:Tim Gu
    f = open('file.txt','r',encoding='utf-8')
    data = f.read()
    print(data)
    >>>
    abcdefg
    jijklmn
    opqtsr
    uvwxyz

      写文件:

    f = open('file.txt2','w',encoding='utf-8') #文件句柄,使用w时事实上是创建了一个新文件,如果源文件存在,会覆盖
    f.write("I will go home!") 
    f.write('
    ByeBye!')
    f.write('
    adfas')

     

      追加文件:

      

    f = open('file.txt2','a',encoding='utf-8') #文件句柄
    f.write("See you,tomorrow!")

      打开文件file.txt2

    I will go home!
    ByeBye!
    adfasSee you,tomorrow!

      以行读取文件:
    # Author:Tim Gu
    f = open('file.txt2','r',encoding='utf-8') #文件句柄
    print(f.readline())  #读取一行
    for i in range(2):   #使用for循环读取2行
        print(f.readline()) 

      使用readline()读取的是文件的单行,readlines()会读取文件全部行,每行作为一个元素形成一个列表。readlines()因为会一下子把文件全部读取到内存,所以只适合读小文件。

      下面示例读取文件,但不读取第10行:

    # Author:Tim Gu
    f = open('file3.txt','r',encoding='utf-8') #文件句柄
    #print(f.readlines())
    for index,line in enumerate(f.readlines()): #使用遍历读取文件
        if index == 9:
            print('------------------我是分割线-------------------')
            continue
        print(line.strip())

      输出:

    从前现在过去了再不来
    红红落叶长埋尘土内
    开始终结总是没变改
    天边的你飘泊白云外
    苦海翻起爱恨
    在世间难逃避命运
    相亲竟不可接近
    或我应该相信是缘份
    情人别后永远再不来(消散的情缘)
    ------------------我是分割线-------------------
    鲜花虽会凋谢(只愿)
    但会再开(为你)
    一生所爱隐约(守候)
    在白云外(期待)
    苦海翻起爱恨
    在世间难逃避命运
    相亲竟不可接近
    或我应该相信是缘份
    苦海翻起爱恨
    在世间难逃避命运
    相亲竟不可接近
    或我应该相信是缘份

      处理大文件的方法:这行代码的效果和上面的一样,只是使用了迭代器,使得内存可以只保留一行

    f = open('file3.txt','r',encoding='utf-8') #文件句柄
    count = 0
    for line in f: #一行行读取文件,内存中只保留一行。
        if count == 9:
            print('------------我是分割线---------------')
            count += 1
            continue
        else:
            print(line.strip())
            count += 1

      光标处理:seek()用法

    # Author:Tim Gu
    f = open('file3.txt','r',encoding='utf-8') #文件句柄
    print(f.tell()) #读取光标坐在位置
    print(f.readline()) #读取一行
    print(f.readline()) #读取第二行
    print(f.readline()) #读取第三行
    print(f.tell()) #打印光标所在位置
    f.seek(0) #使光标回到原点
    print(f.tell()) #打印光标位置
    >>>
    0
    从前现在过去了再不来
    
    红红落叶长埋尘土内
    
    开始终结总是没变改
    
    90
    0

      flush()实时将数据写入磁盘

      打印进度条的小方法: 

    # Author:Tim Gu
    import sys,time
    for i in range(20):
        sys.stdout.write("#")  #sys.stdout方法在同一行打印
        sys.stdout.flush()      #每打印一个#符号写入一次
        time.sleep(0.3)         #每打印一次隔0.3秒
    >>>
    ####################

      

      truncate() 截断文件,可以清空文件

    # Author:Tim Gu
    f = open('file.txt','a',encoding='utf-8')
    f.truncate(10)  #保留文件前10个字符,其余截断

      

      文件的模式:r+读写模式:这段代码会先读取3行,然后再在文件最后写入"-------------------------------------"

    # Author:Tim Gu
    f = open('file.txt','r+',encoding='utf-8') #读写
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.write("----------------------------------------------")
    print(f.readline())

      文件的模式:w+ 写读模式:会创建新文件,此段代码会覆盖掉源文件

    # Author:Tim Gu
    f = open('file.txt','w+',encoding='utf-8') #写读
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.write("----------------------------------------------")
    print(f.readline())


     

      tell()和seek()联合使用:

    # Author:Tim Gu
    f = open('file.txt','w+',encoding='utf-8') #写读
    f.write("-----------------------------1------------------------")
    f.write("
    -----------------------------2------------------------")
    f.write("
    -----------------------------3------------------------")
    f.write("
    -----------------------------4------------------------")
    print(f.tell()) #打印光标所在位置
    f.seek(10)   #使光标回到第十个字符的位置
    print(f.readline())   #打印当前行
    >>>
    222
    -------------------1------------------------

    此时文件内容:

    -----------------------------1------------------------
    -----------------------------2------------------------
    -----------------------------3------------------------
    -----------------------------4------------------------should be at the begining of the second line

      line.replace的用法,修改文件中的某一行内容:

    # Author:Tim Gu
    f = open('file3.txt','r',encoding='utf-8')
    f_new = open('file3.bak','w',encoding='utf-8')
    for line in f:
        if '天边的你飘泊白云外' in line:
            line = line.replace('天边的你飘泊白云外','aaaaaaaaa')  #修改这一行字符串
        f_new.write(line)
    f.close()
    f_new.close()

       使用with打开文件:

    with open('file.txt','r',encoding='utf-8') as f,
            open('file3.txt','r',encoding='utf-8') as f2:
        for line in f:
            print(line)
        for line in f2:
            print(line)

      注:因实际开发过程中,打开文件很容易忘记关闭文件,造成内存不能释放,所以一般可以选择使用with open方法打开文件

      
      python3的新特性:x

    f = open('1.txt','x',encoding='utf-8') #如果文件存在则报错,不存在则创建文件并只写

      文件之ab模式:

    f = open('1.txt','ab') #使用ab写文件
    f.write(bytes('顾卿',encoding='utf-8')) #因为有b,所以必须传字节类型,所以使用bytes把字符串转化为字节类型
    f.close()

      seek()和tell()的特性:
    模式r+一般比较常用,相比较a+,r+可控制指针位置来写,而a+则永远只能在末尾写 

    f = open('1.txt','r+',encoding='utf-8') #打开模式是r+(无b),读取按照字符读取
    data = f.read(1) 
    print(f.tell()) #tell当前指针所在的位置(字节)
    f.seek(f.tell()) #调整当前指针的位置(字节)
    f.write('888') #当前位置开始覆盖
    f.close()

      

      flush()的作用:

    f = open('1.txt','a',encoding='utf-8')
    f.write('123')
    f.flush()  #将缓存内容强制写进磁盘
    input('asdfasd')

      seekable():
    是否可以移动指针

    打开两个文件,将第一个文件的内容写进第二个文件:

      

    with open('1.txt','r',encoding='utf-8') as f1,open('2.txt','w',encoding='utf-8') as f2:
        times = 0
        for line in f1:
            times += 1
            if times <= 10:
                f2.write(line)
            else:
                break
                
    读取第一个文件内容,修改后写入第二个文件:
    with open('1.txt','r',encoding='utf-8') as f1,open('2.txt','w',encoding='utf-8') as f2:
        times = 0
        for line in f1:
            new_str = line.replace('aaaaa','st')
            f2.write(new_str)
  • 相关阅读:
    jQuery EasyUI API 中文文档 可调整尺寸
    jQuery EasyUI API 中文文档 链接按钮(LinkButton)
    jQuery EasyUI API 中文文档 手风琴(Accordion)
    jQuery EasyUI API 中文文档 表单(Form)
    jQuery EasyUI API 中文文档 组合(Combo)
    jQuery EasyUI API 中文文档 布局(Layout)
    jQuery EasyUI API 中文文档 拆分按钮(SplitButton)
    jQuery EasyUI API 中文文档 菜单按钮(MenuButton)
    jQuery EasyUI API 中文文档 搜索框
    jQuery EasyUI API 中文文档 验证框(ValidateBox)
  • 原文地址:https://www.cnblogs.com/guqing/p/6084009.html
Copyright © 2011-2022 走看看