• Python-Basis-6th


    周二,晴,记录生活分享点滴

    参考博客:https://www.cnblogs.com/yuanchenqi/articles/5782764.html

    Python版本:3.5

    文件操作基本流程

    需知:能调用方法的一定是对象

    li=[1,2,3]  #li是对象
    li.append('2')  #li是对象
    'asc'.capitalize()  #asc是对象

    流程:1.创建文件对象  2.调用文件方法进行操作  3.关闭文件

    昨夜寒蛩不住鸣。
    惊回千里梦,已三更。
    起来独自绕阶行。
    人悄悄,帘外月胧明。
    白首为功名,旧山松竹老,阻归程。
    欲将心事付瑶琴。
    知音少,弦断有谁听。
    小重山文件
    f = open('小重山','r',encoding='utf-8')
    data = f.read()
    print(data)
    f.close()

    小结:

    open 指打开同一目录下的文本文件

    文件在 py3中是以 utf-8保存的,Windows系统中的默认编码是 gbk ,需要在 f = open('小重山')中加入 encoding='utf-8' 即 f = open('小重山',encoding='utf-8' )

    文件的操作对象及为文件的句柄,本质上是文件对象,如: f = open('小重山','r',encoding='utf-8'),只有有句柄,才可以对文件进行操作

     

    文件操作具体方法

    基本操作  r (只可读)  w (只可写)  a (追加)

    read

    read括号内数字的含义

    f = open('小重山','r',encoding='utf-8')
    data = f.read(5)  #指5个字符
    print(data)
    f.close()

    wirte

    write在小重山文本成功写入hello world ,但是清空小重山文本之前的内容;

    清空的动作从第一行的 "w" 开始的,如果没有对应文件会自动创建文件,有文件会自动清空文件,从第一个字符开始写。

    f = open('小重山','w',encoding='utf-8')
    f.write('hello world')
    f.close()

     write连续写两次,输出结果顺序排列,无换行,无空格

    f = open('小重山2','w',encoding='utf-8')
    f.write('hello world')  #如需换行,需加
    
    f.write('Chung')
    f.close()
    #hello worldChung

    append

    在原文件的基础上进行写入,是从光标的后面开始

    f = open('小重山','a',encoding='utf-8')
    f.write('
    hello world
    ')  #如需换行,需加
    
    f.write('Chung')
    f.close()
    # hello world
    # Chung

    扩展操作

    readline

    读取一整行,包括换行符  

    f = open('小重山','r',encoding='utf-8')
    print(f.readline())  #打印一行,包括默认隐藏的换行符 
    
    print(f.readline())  #到这共打印两行,包括默认隐藏的换行符 
    
    f.close()
    #昨夜寒蛩不住鸣。
    
    #惊回千里梦,已三更。

    readlines(不用readlines读文件,用 f )

    读取整篇文章

    f = open('小重山','r',encoding='utf-8')
    print(f.readlines())  #默认打印所有行,字符串放在列表中
    #['昨夜寒蛩不住鸣。
    ', '惊回千里梦,已三更。
    ', '起来独自绕阶行。
    ', '人悄悄,帘外月胧明。
    ', '白首为功名,旧山松竹老,阻归程。
    ', '欲将心事付瑶琴。
    ', '知音少,弦断有谁听。']
    f.close()

    通过readlines打印整篇文章

    f = open('小重山','r',encoding='utf-8')
    for i in f.readlines():
        print(i.strip())  #打印整篇文章,因为print自带换行,所有函数strip消除变量i即readlines读取的换行符
    f.close()

    通过readlines在指定语句后面加入句子

    f = open('小重山','r',encoding='utf-8')
    data=f.readlines()#注意及时关闭文件,只打开一次,节省时间
    f.close()
    
    number = 0
    for i in data:
        number += 1
    
        if number == 6:
            i = ''.join([i.strip(), 'I like it.'])  # 取代万恶的+
        print(i.strip())
    f.close()

     f 即用即取,节省内存(用此方法读取文件)

    1 ##########对于大数据文件,要用以下方式(the best way):
    2 f = open('小重山','r',encoding='utf-8')
    3 number=0
    4 for i in f:  #这是for内部将f对象做成一个迭代器,用一行取一行。
    5     number+=1
    6     if number == 6:
    7         i = ''.join([i.strip(), 'I like it.'])  # 取代万恶的+
    8     print(i.strip())

    tell、seek

    tell 表示当前光标的位置

    seek 表示移动光标到指定位置

    f = open('小重山','r',encoding='utf-8')
    
    print(f.tell())#  取出光标位置   #tell识别中文时默认一个字占3个字符,英文时一个字母占一个字符
    print(f.read(2))
    print(f.tell())
    
    f.seek(0)#  移动光标到指定的位置
    print(f.read(4))

    文件操作之flush及遍历文件最优法

    flush实际应用

    #flush():同步将数据从缓存转移到磁盘上去
    #实例:可用作进度条
    import sys,time
    for i in range(30):
        sys.stdout.write("*")
        sys.stdout.flush()
        time.sleep(0.1)

    print 的 flush

    #print的flush
    import sys,time
    for i in range(30):
        print('*',end='',flush=True)
        time.sleep(0.1)

    truncate:截断

    f=open('小重山2','w',encoding='utf8')
    #truncate():截断数据(不能在r模式下)
    #在w模式下:先清空,再写,再截断
    #在a模式下:直接将指定位置后的内容截断
    f.truncate(5)
    f.write('hello world')
    f.truncate(5)
    f.close()

    r+, w+, a+

    • r+:(读写模式)光标默认在0位置,最后位置开始写
    • w+:(写读模式)先清空,再写读
    • a+:(从最后的位置开始读)光标默认在最后位置
    f=open('小重山','r+',encoding='utf8')
    print(f.tell())  #当前光标位置为0
    print(f.readline())  #昨夜寒蛩不住鸣。
    f.write('岳飞')  #《小重山》文件末尾处出现“岳飞”字样
    print(f.tell())  #当前光标位置为228
    f.seek(0)  #制定光标移动到0
    print(f.readline())  #昨夜寒蛩不住鸣。
    f.close() 

    文件操作之修改磁盘文件

     常规思路(无法实现)

    由于磁盘存储机制不能完成

    f=open('小重山','r+',encoding='utf8')
    number=0
    for line in f:
        number+=1
        if number==3:
            f.write('Chung')  #此方法只能从文章末尾处开始添加

    只能采取重新创建一个文件的思路

    f_read=open('小重山','r',encoding='utf8')
    f_write = open('小重山2','w',encoding='utf8')
    
    number=0
    for line in f_read:
        number+=1
        if number==5:
            line=''.join([line.strip(),'alex
    '])  #在句子后面继续添加字符
            # line='hello 岳飞
    '  #插入一行文字
        f_write.write(line)
    
    f_read.close()
    f_write.close()

    文件操作之with方法

    省略主动关闭文件操作

    with open('log','r') as f:
            pass
     f=open('小重山', 'r')  #为保证数据储存不失误,需要输入f.close来结束
     f.readline()
     f.read()
     f.close()
    
     with open('小重山', 'r') as f:   #无需输入f.close,数据可直接正常储存
         f.readline()
         f.read()
     print('hello')

    同时管理多个文件对象

    with open('log1') as obj1, open('log2') as obj2:
        pass 
    with open('小重山','r',encoding='utf8') as f_read, open('小重山2','w',encoding='utf8') as f_write:
        for line in f_read:
            f_write.write(line)
  • 相关阅读:
    常用类练习题(用字符串常用类判断输入的一段话是否为回文)
    面向对象综合练习题(动物乐园)
    多态练习题(通过UML建模语言来实现饲养员喂养动物)
    UML建模语言使用的概述
    多态练习题(员工使用不同的交通工具回家)
    多态练习题(宠物医院治疗小动物的问题 ,多态的应用:向上类型传递)
    接口练习题(书信接口)
    接口练习题(实现接口功能拓展的两种方法)
    Oracle rman 各种恢复
    Oracle rman 全备份的一个小例子
  • 原文地址:https://www.cnblogs.com/chungzhao/p/12914954.html
Copyright © 2020-2023  润新知