• python(open 文件)


    一、open 文件

    1.open('file','mode')打开一个文件

    • file  要打开的文件名,需加路径(除非是在当前目录)
    • mode  文件打开的模式
    • 需要手动关闭 close

    2.with open('file','mode')as...

    • 不需要手动关闭文件

    二、文件操作模式

    1.'r': 以只读模式打开(默认)(必须保证文件存在)

    • python2.x 文件名中出现汉字时,需在括号内加 u 就不会出现报错IOError
    #python2.x
    file1 = open(u"D:新方硕.txt","r",encoding="gbk")
    print file1.read()
    file1.close()
    
    #python3.x
    file1 = open("D:新方硕.txt","r",encoding="gbk")
    #文件内中文为手动输入,则需转码
    print (file1.read().decode('gbk').encode('utf-8'))
    file1.close()
    • read(size) 读取所有
      • 返回字符串
      • 括号接读取 size 字符
    #read()不传参数时默认读取所有
    f = open("D:work_docCodeFileStudy\filename")
    print(f.read())
    f.close()
    
    #结果如下:
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """
    
    #read(3)括号内参数3代表字符数,1个汉字1个字符
    f = open("D:work_docCodeFileStudy\filename")
    print(f.read(3))
    f.close()
    
    #结果如下:
    """
    这缘分
    """
    #文件内容如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """
    
    f = open("D:work_docCodeFileStudy\filename","r",encoding="gbk")
    
    print(f.read(3))     #读取完这行后,操作光标已经在第一行末尾了
    print(f.read(3),end="")     #所以接下来再次读取会读取第二行数据
    f.close()
    
    #读取结果如下
    """
    这缘分
     像一
    """
    • readline(size)默认读取一行
      • 返回字符串
      • 括号内 size 为读取的子符数
    #readline()默认读取一行
    file1 = open("D:新方硕.txt","r")
    print (file1.readline())
    file1.close()
    
    #readline(size)括号内填了字符数,则按字符读取
    file1 = open("D:新方硕.txt","r")
    print (file1.readline(5))
    file1.close()
    #文件内容如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """
    
    f = open("D:work_docCodeFileStudy\filename","r",encoding="gbk")
    
    print(f.readline(),end="")     #读取完这行后,操作光标已经在第一行末尾了
    print(f.readline(),end="")     #所以接下来再次读取会读取第二行数据
    f.close()
    
    #读取结果如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    """
    • readlines()读取所有
      • 返回列表
    file1 = open("D:新方硕.txt","r")
    print (str(file1.readlines()).decode('string_escape'))    #转码问题
    file1.close()
    with open('d:\test1.txt','r') as file1:
        for i in file1.readlines():
            print (i)
    #去掉打印出来的换行符
    #方法一
    f = open("D:work_docCodeFileStudy\filename","r",encoding="gbk")
    data = f.readlines()
    for i in data:
        print(i.strip())
    f.close()
    
    #方法二
    f = open("D:work_docCodeFileStudy\filename","r",encoding="gbk")
    data = f.readlines()
    for i in data:
        print(i.splitlines()[0])
    f.close()
    #文件内容如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """
    
    #对返回的结果中某一行进行处理操作
    f = open("D:work_docCodeFileStudy\filename","r",encoding="gbk")
    data = f.readlines()
    line = 0
    for i in data:
        line += 1
        if line == 4:
            i = "  --".join([i.strip(),"王力宏"])    #往第四行后面添加 "王力宏" 字符串
        print(i.strip())
    f.close()
    
    #返回结果如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销  --王力宏
    """
    • 最优读取文件方法,不占内存
    #文件内容如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """
    
    f = open("D:work_docCodeFileStudy\filename","r",encoding="gbk")
    for i in f:    #for循环内部将 f 对象做出了一个迭代器,用一行数据取一行数据,用完后(print)的数据删除,不占内存空间
        print(i.strip())
    f.close()
    
    #返回结果如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """

    备注:

    • 调用 read()和readlines() 会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用 read(size) 方法,每次最多读取 size 个字节的内容。另外,调用 readline() 可以每次读取一行内容。
    • 如果文件很小,read() 一次性读取最方便;如果不能确定文件大小,反复调用 read(size) 比较保险;如果是配置文件,调用 readlines() 最方便。

    2.'w':以只写模式打开

    • 若文件存在,则会自动清空文件,然后重新创建。
    • 若文件不存在,则新建文件。
    • 使用这个模式必须要保证文件所在目录存在,文件可以不存在。
    file1 = open("D:\xfs.txt","w")
    file1.write("I am python!")
    file1.close()
    #将test文件内容复制到test1中
    file1 = open('d:\test.txt','r')
    file2 = open('d:\test1.txt','w')
    file3 = file2.write(file1.read())
    file1.close()
    file2.close()
    with open('d:\test.txt','w') as file1:
        file2 = file1.write('缘分一道桥
    歌词
    男:
    秦时明月汉时关
    万里长征人未还
    但使龙城飞将在
    不教胡马度阴山
    女:
    狼烟千里乱葬岗
    '
                            '乱世孤魂无人访
    无言苍天笔墨寒
    笔刀春秋以血偿
    男:
    谈爱恨 不能潦草
    战鼓敲啊敲
    用信任 立下誓言我来熬
    '
                            '女:
    这缘份 像一道桥
    旌旗飘啊飘
    你想走就请立马抽刀爱一笔勾销
    合:
    谈爱恨 不能潦草
    红尘烧啊烧
    以生死 '
                            '无愧证明谁重要
    女:
    这缘份 像一道桥
    故事瞧一瞧
    男:
    走天涯你我卸下战袍
    合:
    梦回长城谣')
    • 该模式下不能使用 read*() 方法。
    #报错IOError: File not open for reading
    file1 = open("D:\xfs.txt","w")
    file1.write("I am python!")
    print (file1.read())

    3.'a':以追加模式打开

    • 若文件存在,则会追加到文件的末尾。
    • 若文件不存在,则新建文件。
    • 该模式不能使用 read*() 方法。
    #写入前文件内容如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    """
    
    #进行追加写入操作
    f = open("D:work_docCodeFileStudy\filename","a")
    f.write("
    --王力宏")
    f.close()
    
    #写入后文件内容如下
    """
    这缘分 像一道桥
    旌旗飘啊飘
    你想走 就请立马抽刀
    爱一笔勾销
    --王力宏
    """

    4.'r+': 以文本读写模式打开

    • 可以写到文件任何位置。
    • 默认写的指针开始指在文件开头, 因此会覆写。
    • 可以使用 read*()
    file1 = open(u"D:\新方硕.txt","r+")
    file1.seek(3)
    file1.write("HTML")
    file1.close()
    
    #默认从第一个子节开始覆写
    file1 = open(u"D:\新方硕.txt","r+")
    file1.seek(3)
    file1.write("HTML")
    file1.close()
     
    5.'w+': 以文本读写模式打开(打开前文件会被清空)
    • 文件不存在时,写入会自动创建文件
    f = open("music","w+",encoding="utf8")
    f.write("秦时明月汉时关
    ")
    f.write("万里长征人未还
    ")
    f.write("但使龙城飞将在
    ")
    f.write("不教胡马度阴山")
    f.close()
    
    #结果如下
    """
    秦时明月汉时关
    万里长征人未还
    但使龙城飞将在
    不教胡马度阴山
    """
    6.'a+': 以文本读写模式打开(写只能写在文件末尾)
    #写入前文件内容如下
    """
    秦时明月汉时关
    万里长征人未还
    """
    
    f = open("music","a+",encoding="utf8")
    f.write("
    --王力宏")
    f.close()
    
    #写入后内容
    """
    秦时明月汉时关
    万里长征人未还
    --王力宏
    """

  • 相关阅读:
    Oracle学习笔记(oracle日期处理)
    Oralce学习笔记(plsql链接客户端)
    innerText和innerHTML应用
    oracle学习笔记(行转列列转行)
    js工作笔记基础一(分隔字符串)
    Oracle学习笔记(动态函数调用)
    理解!Page.IsPostBack和NET控件中的AutoPostBack
    oracle学习笔记(包头模板)
    div拖动层自己写
    oralce学习笔记(包体模板)
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/11734995.html
Copyright © 2020-2023  润新知