• Python:Day08 文件操作


    能调用方法的一定是对象!

    文件的操作分为三步:

    1、打开文件

    2、操作文件

    3、关闭文件

    1 f= open('小重山','r',encoding='utf8')  #以读的方式打开一个文件,如果文件不存在,则报错
    2 f= open('小重山','w',encoding='utf8')  #以写的方式打开一个文件,如果文件不存在,则创建一个,如果文件中有内容,则会将内容格式化掉
    3 f= open('小重山','a',encoding='utf8')  #以追加的方式打开一个文件,如果文件不存在,则创建一个
    4 f.write('hello world')  #在追加模式下,往文件里面写内容也是用write,而不是append,追加的信息是紧跟在文本后面,没有空格,在w模式下,两个write内容也是紧跟着的
    5 f.read()    #读整个文件
    6 
    7 f.close()

    默认情况下,程序执行完成之后,python解释器会自动关闭文件,也就是说默认执行了f.close,但这种是不安全或都说是不可靠的,所以最好的手动关闭文件。

    文件操作方法:

    1、read

    print(f.read(10))   #括号中的数字表示字符,一个汉字和字母一样,都占一个字符,换行符
    也算一个字符,但在打印的时候不显示出来
    
    显示如下:
    昨夜寒蛩不住鸣。
    千

    2、readline:缺点:只能一行一行打,不能指定多行

    print(f.readline())   #打印一行,如果括号中加数字,则表未打印这一行的多少个字符,数字超过当前行所有字符总数时,显示这一行所有内容,换行符
    不显示出来,会执行换行运作
    print(f.readline())   #打印下行一内容,说明无论read还是readline,都是从光标之后开始读的
    
    显示如下:
    昨夜寒蛩不住鸣。
    
    千里梦,已三更。

    3、readlines:缺点:打开的为整个文件,非常占用内存。

    print(f.readlines())   #括号里什么不都加,读所有行,注意:返回值是一个列表,且每一行为一个字符串,
    显示,不执行换行运作
    
    显示如下:
    ['昨夜寒蛩不住鸣。
    ', '千里梦,已三更。
    ', '起来独自绕阶行。
    ', '人悄悄,帘外月胧明。
    ', '白首为功名,旧山松竹老,阻归程。
    ', '欲将心事付瑶琴。
    ', '知音少,弦断有谁听。']

     小练习:打印出整首词并在第6行的后面加一句:i like it

    number = 0
    for i in f.readlines():     #一定要注意,f.readlines()是一个列表,每一行为一个元素
        number +=1
        if number ==6:
            i=''.join([i.strip(),'i like it'])   #用中括号括起来的都是列表,join的这个方法就是将列表中的字符串拼接起来
        print(i.strip())    #这个代码有一个小优化,就是去掉了一个print,要学会这种思路
    f.close()

    最有效的打开文件方法:

    for i in f:    这是for内部将f对象做成一个迭代器,用一行去一行
        print(i.strip())

    enumerate()  #后面括号中必须是一个序列

    4、tell:告知光标位置

    print(f.tell())
    print(f.read(2))    
    print(f.tell())
    
    显示如下:
    0
    昨夜
    6    #注意:一个中文字符为光标向后挪3个,一个英文字符光标向后挪1个

    5、seek:调整光标位置

    f.seek(0)   #括号中的数字代表光标要调整到的位置

    6、flush:将内存中数据存到硬盘中

    进度条:
    import sys,time
    for i in range(30):
        sys.stdout.write('*')
        sys.stdout.flush()
        time.sleep(0.1)
    
    for i in range(30):
        print('*',end='',flush=True)   #end的用法要记住
        time.sleep(0.1)

    7、truncate():截断从当前光标起括号中数字起后面的所有字符,如果不加数字,则代表从前当光标位置开始截断,此方法必须要write和append模式下使用。

    桃之夭夭,灼灼其华。之子于归,宜其室家。
    桃之夭夭,有蕡其实。之子于归,宜其家室。
    桃之夭夭,其叶蓁蓁。之子于归,宜其家人。
    
    f.truncate(24)  #桃之夭夭,灼灼其
    
    f.seek(24)
    f.truncate()    #桃之夭夭,灼灼其

    文件的打开模式:

    r+ :光标是在最前面一个位置,读可以,如果要写的话,只能写在最后,因为读是根据光标的,而写是不管你光标在哪,都是写在最后面

    w+ :首先还是先格式化文件,然后写,写过之后光标移到写的内容后面,如果想读,需要调整光标

    a+ :以追加方式打开时,光标在最后,所以写的话也是紧跟最后,读的话还是需要调整光标

    with语句

    为了避免打开文件后忘记关闭,可以通过管理上下文,即:

    with open('log','r') as f:  #括号内的两个都要加引号
        pass

    如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

    在python2.7后,with又支持同时对多个文件的上下文进行管理,即,

    with open('log1') as obj1,open('log2') as obj2:     #默认情况下,如果不加模式,则文件以read模式打开
        pass

    别人总结的,先贴着!

    f.read() #读取所有内容,光标移动到文件末尾
    f.readline() #读取一行内容,光标移动到第二行首部
    f.readlines() #读取每一行内容,存放于列表中
    
    f.write('1111
    222
    ') #针对文本模式的写,需要自己写换行符
    f.write('1111
    222
    '.encode('utf-8')) #针对b模式的写,需要自己写换行符
    f.writelines(['333
    ','444
    ']) #文件模式
    f.writelines([bytes('333
    ',encoding='utf-8'),'444
    '.encode('utf-8')]) #b模式
    
    #了解
    f.readable() #文件是否可读
    f.writable() #文件是否可读
    f.closed #文件是否关闭
    f.encoding #如果文件打开模式为b,则没有该属性
    f.flush() #立刻将文件内容从内存刷到硬盘
    f.name
  • 相关阅读:
    两数之和
    swift 结构体
    打家劫舍II
    Swift的访问控制讲解
    swift版 二分查找 (折半查找)
    RAC(ReactiveCocoa)介绍(一)
    变位词
    双向循环链表
    单链表
    顺序链表(C++)
  • 原文地址:https://www.cnblogs.com/sq5288/p/8315214.html
Copyright © 2020-2023  润新知