zoukankan      html  css  js  c++  java
  • Python基础-文件读写

    读取文件

    全部读取

    新建一个a.txt文件,里面写入如下三行:

    aaa
    bbb
    ccc

    python自动导入了io模块,我们可以直接使用open函数来打开文件,得到文件对象,然后调用对象的read方法获取文件内容。

    file = open("a.txt")
    data = file.read()
    file.close()
    print(data)

    打印结果:

    aaa
    bbb
    ccc

    通常,在程序退出时会自动关闭文件对象,但是有可能我们的程序运行时间长呢,也就占用了文件锁,并且写入文件的时候,文件内容会被放入缓冲区以提高效率,此时如果程序未运行完就报错了,那么写入的内容实际上是不会写入文件的。所以关闭文件没有坏处,应该要养成用完就关的习惯。

    为了保证文件一定能关闭,程序员一般的做法是使用异常捕获的方式处理。而python给我们提供了便利的写法 :with上下文管理器

    with open("a.txt") as file:
        data = file.read()
    print(data)

    注意一点,如果文件之中有中文,可能会出现文件是utf-8格式的情况,这种情况下read方法读取中文内容就会报错,需要打开文件的时候指定编码:

    with open("a.txt",encoding='utf-8') as file:
        data = file.read()
    print(data)

    逐行读取

    逐行读取有三种写法,第一种是文件迭代器,直接遍历打开的文件对象

    with open("a.txt") as file:
        for line in file:
            print(line.rstrip())

    打印结果:

    aaa
    bbb
    ccc

    进行rstrip过滤是因为每一行的末尾都隐藏的有回车换行。

    第二种是使用readline方法每次读取一行

    with open("a.txt") as file:
        while True:
            data = file.readline()
            if not data: break
            print(data.rstrip())

    打印结果:

    aaa
    bbb
    ccc

    第三种用readlines方法将文件所有内容取出装入一个列表中,然后遍历列表

    with open("a.txt") as file:
        lines = file.readlines()
    for data in lines:
        print(data.rstrip())

    打印结果:

    aaa
    bbb
    ccc

    写入文件

    写入文件要在打开文件的时候提供第二个参数表明已什么方式打开,读取文件内容的时候是没有传入参数的,实际上是默认为读模式。

    with open("b.txt",'w') as file:
        file.write('aaa')

    参数常用有如下几种:

    r:读模式
    w:写模式
    x:独占写模式
    a:追加写模式 以这种模式打开文件后 指针会放到文件的末尾
    b:二进制模式
    +:读写模式 必须和其他模式搭配使用 如r+(指针在开头,先读后写)、a+(指针在末尾,可读追加写)、w+(指针在开头,覆盖写读)

    需要介绍的是r+和w+的区别,都是读写,但不一样的是指针的位置

    r+模式指针在文档开头,读一行指针走一行,如果读完之后再写入,指针就到了文件末尾,那么写入的内容就是追加的,如果先写入,那么就是覆盖的。

    比如现在b.txt里面有4个字符:

    abcd

    那么我先写后读:

    with open("b.txt",'r+') as file:
        file.write('x')
        file.write('y')
        file.seek(0)
        print(file.read())

    打印结果:

    xycd

    可以看到,写入了两个字符,就是覆盖了前两个字符,后面的字符仍然没变。seek(0)是操作指针回到开头,要不然只会打印出后面的cd两个字符。

    w+是全截断覆盖写,也就是把文档当做一个空白文档新写东西,无论文档里面有啥,读出来的都是空。

    把b.txt的内容恢复成abcd四个字符。

    with open("b.txt",'w+') as file:
        print(file.read())
        file.write('x')
        file.write('y')
        file.seek(0)
        print(file.read())

    打印结果:


    xy

  • 相关阅读:
    【前端开发】关于闭包最通俗易懂的解释 for循环,定时器,闭包混合一块的那点事。
    【前端node开发】你需要的Express开发教程
    【前端vue开发】vue开发输入姓名,电话,公司表单提交组件
    【前端vue开发】vue知识点超链接学习笔记
    【前端vue开发】vue子调父 $emit (把子组件的数据传给父组件)
    【前端vue开发】vue项目使用sass less扩展语言所要安装的依赖
    【轨迹动画css】不规则轨迹动画css教程,弹球,客服广告悬浮层都可以用
    【前端vue开发架构】vue开发单页项目架构总结
    3D全景漫游
    一些好的网站
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/13298978.html
Copyright © 2011-2022 走看看