zoukankan      html  css  js  c++  java
  • python 基础 day03—文件操作

    对文件操作流程:

    1.打开文件,得到文件句柄并赋值给一个变量

    2.通过句柄对文件进行操作

    3.关闭文件

    创建一个名为lyrics的txt文件在目录下

    f = open('lyrics','r',encoding="utf-8")  #打开文件,f为文件句柄,r为读模式
    first_line = f.readline()    
    print("first line:",first_line)             #读文件的第一行,文件太大时建议循坏方式读取内容
    print('我是分割线'.center(50,'-'))      #创建一条分割线
    data = f.read()                              #读取完整的文件,文件太大时不要使用
    print(data)                                    #打印文件
    
    f.close()                                        #关闭文件
    

      

     注意文件是utf-8保存的,打开文件时open函数通过操作系统打开文件,而我所在的win7操作系统默认使用gbk编码,因为不能直接打开,需要加上encoding="utf-8"

    打开文件的模式有:

    • r,只读模式(默认)。
    • w,只写模式。【不可读;不存在则创建;存在则覆盖原来的内容;】
    • a,追加模式。【可读;   不存在则创建;存在则只追加内容;等同append】

    "+" 表示可以同时读写某个文件

    • r+,可读写文件。【可读:从0位读取;可写:末端添加】
    • w+,写读(没什么实际用处)
    • a+,同a

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

    • rU
    • r+U

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

    • rb
    • wb
    • ab

    循环读取文件:

    readline 读取整行文字

    readlines 读取所有行

    读取打印n行数据

    for i in range(n):
        print(f.readline)
    

     

    读取打印整份文件:

    只适合读小内存文件

    for line in f.readlines():   #每循环一次(打印一行),line等于一个元素
        print(line.strip())             #打印每行,strip()函数:去掉换行符和空格

    读取到第九行插入“分割线”:

    for index,line in enumerate(f.readlines()):
        if index == 9:
            print('我是分割线'.center(50,'-'))
            continue
        print(line.strip())  
    

      

    一行行读取文件,内存里面只保存一行文字

    可适用大文件,效率更高!推荐!

    for line in f:   #f已经变成了一个迭代器
        print(line)
    

     读取到第九行插入“分割线”: 

    #自己添加计数器
    count = 0
    for line in f:
        if count == 9:
            print('我是分割线'.center(50, '-'))
        print(line)
        count += 1
    

      

    文件修改: 

    两种方式

    1.把文件全部加载到内存对象,像VIM一样,修改完后写到原文件(不可取)

    2.打开一个文件,修改完写入一个新文件里面

    如下:

    f= open("lyrics","r",encoding="utf-8")
    f_new= open("new-lyrics.bak",'w',encoding="utf-8")
    
    for line in f:
        if"原文内容哈哈哈" in line:
            line = line.replace("原文内容哈哈哈","更改内容嘿嘿嘿")
        f_new.write(line)
    
    f.close()
    f_new.close()
    

      

    with语句

     为了避免忘记打开文件,可以用with

    with open("lyrics","r", encoding="utf-8") as f:
        for line in f:
            print(line)
    #不用执行关闭文件操作
    

      

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

  • 相关阅读:
    Android Service学习之AIDL, Parcelable和远程服务
    数据结构&算法实践—【排序|交换排序】地精排序及改进
    Android: INSTALL_FAILED_UPDATE_INCOMPATIBLE错误解决措施
    重构改善既有代码的设计:对象之间移动特性的八种方法(五)
    重构改善既有代码的设计:简化条件表达式(七)
    [Innost]Android深入浅出之Binder机制
    Android: R cannot be resolved to a variable
    Python xml属性/节点/文本的增删改[xml.etree.ElementTree]
    数据结构&算法实践—【排序|插入排序】插入排序
    重构改善既有代码的设计:简化函数调用 (八)
  • 原文地址:https://www.cnblogs.com/cherrycui/p/10164674.html
Copyright © 2011-2022 走看看