Python基础之文件操作

Python基础之文件操作

目录:

1.文件操作的介绍

2.文件操作的读

3.文件操作的写

4.文件操作的追加

5.文件操作的其他模式

6.文件操作的其他方法

7.文件操作的另一种方式

8.文件操作的改

1.文件操作的介绍

  • 引子

    前提:假如世界上所有可以操作文件的软件全部都消失了,此时!超子qq收到了一个消息:明子给其发了一个消息,是一个文件;护士空姐老师的联系方式.text发给了超子,没有任何其他软件,超子说,我学过python,我可以自学,我用python写一个简单的软件看看能不能打开这个文件。

    我们必须要知道的几个参数是什么?文件操作的三要素:

    # 编码方式 encoding: gbk, utf-8 gb2312 ....
    # 文件路径 path: 这个文件到底存放在计算机的哪个位置。
    # 操作模式 mode: 读,写,读写,写读...
    
  • 简单测试

    # 1. 打开文件产生文件句柄
    f = open('/Users/barry/Desktop/空姐护士老师联系方式.text', mode='r', encoding='utf-8')
    
    # 2. 操作文件句柄
    content = f.read()
    print(content)
    
    # 3. 关闭文件句柄
    f.close()
    

    相关参数解释

    """
    open()  python中的内置函数,用于打开文件进行文件操作的。底层调用的操作系统操作文件的接口。
    mode:操作方式 r w a r+ w+ rb.....
    encoding: 不是具体指编码,声明操作此文件的编解码方式。
    f: 变量,这个变量有点儿特殊,获取的open函数的返回值,我们称之为文件句柄,f fh file_hanlder.
    close(): 关闭文件句柄,在内存中将文件句柄销毁。
    """
    
  • 错误一

    路径错误:我们的路径是字符串的形式,其中你的路径里面的路径分隔符\与后面的字符可能产生的特殊的意义。
    在这里插入图片描述

    解决方式:

    # 方式一:'//Users/barry/Desktop/少妇空姐护士联系方式.text'
    # 方式二:r'/Users/barry/Desktop/少妇空姐护士联系方式.text'  告知解释器这个字符串里面所有的/都代表路径分隔符,
    # 不要与后面的字符产生特殊意义。
    
  • 错误二

    编码错误,文件当时使用的编码与你操作文件定义的编码不一致。

    在这里插入图片描述

    解决方式:尝试不同的编码方式,utf-8 gbk 如果还不行,查看你当时创建文件的那个软件,他有默认设置。

2.文件操作的读

  • 文件操作的读:r rb r+ r+b 模式。

2.1 r模式

  • read方法

    全部都读取出来

    f = open('test', mode='r', encoding='utf-8')
    content = f.read()
    print(content)
    f.close()
    
    
  • read(n)

    按照指定的字符读取

    f = open('test', mode='r', encoding='utf-8')
    content = f.read(3)
    print(content)
    f.close()
    
  • readline

    每次读取一行。

    f = open('test', mode='r', encoding='utf-8')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()
    
  • readlines

    返回一个列表,列表里面的每个元素都是字符串类型,内容为原文件的每一行数据。

    f = open('test', mode='r', encoding='utf-8')
    lst = f.readlines()
    print(lst)
    f.close()
    
  • for 循环遍历

    f = open('test', mode='r', encoding='utf-8')
    # f 文件句柄他是一个迭代器,他的特性是:每次循环,加载到内存中一行,
    # 再次循环,上一行内容在内存中消失,下一行内容加载到内存,每次只是占内存一行。
    for line in f:
        print(line.strip(), type(line))
    f.close()
    

2.2 rb模式

  • 读取文件,读取文件读出来的数据为字节序列,rb模式一般操作的是非文字类的文件,图片,视频,音频。

    f = open('test', mode='rb')
    # print(f.read())
    # 一般不for遍历读取rb模式。
    for line in f:
        print(line)
    f.close()
    
    # rb模式一般操作的是非文字类的文件。
    f = open('mn.png', mode='rb')
    print(f.read())
    f.close()
    
    

3.文件操作的写

  • 文件操作的写:w wb w+ w+b模式。

3.1 w模式

  • 没有文件,创建文件,写入内容。

    f = open('testw', encoding='utf-8', mode='w')
    f.write('随便写一点...')
    f.close()
    
  • 有文件,清空文件内容,写入新内容。

    f = open('testw', encoding='utf-8', mode='w')
    f.write('宇超怎么老犯困呀?')
    f.close()
    

3.2 wb模式

  • 以字节序列的数据写入文件,一般操作与非文字类文件。图片,视频,音频。

    f = open('mn.png', mode='rb')
    pic_content = f.read()
    f.close()
    
    f2 = open('mn2.png', mode='wb')
    f2.write(pic_content)
    f2.close()
    

4.文件操作的追加

  • 文件操作的追加:a ab a+ a+b

  • 没有文件,创建文件,写入内容。

    f = open('testa', encoding='utf-8', mode='a')
    f.write('宇超怎么老犯困呀?')
    f.close()
    
  • 有文件,在原文件后面追加新内容。

    f = open('testa', encoding='utf-8', mode='a')
    f.write('王硕默写的还可以挺好,但是荣轩默写不行')
    f.close()
    

5.文件操作的其他模式

  • +在原有的基础上,增加一个新的功能。

  • r+模式 读写模式,先读,后写。

    # f = open('test', mode='r', encoding='utf-8')
    # print(f.read())
    # f.write('6666')
    # f.close()
    
    f = open('test', mode='r+', encoding='utf-8')
    print(f.read())
    f.write('6666')
    f.close()
    
  • w+ 自己测试

6.文件操作的其他方法

  • 方法就是文件句柄可以调用的方法:read readline readlines write

  • tellseek

    tell就是获取光标的位置,seek设置光标的位置。

    f = open('test', mode='r', encoding='utf-8')
    # print(f.tell())  # 最开始光标在0的位置
    f.read(3)
    print(f.tell())  # 获取光标的位置
    f.close()
    
    # seek
    f = open('test', mode='r', encoding='utf-8')
    # print(f.tell())  # 最开始光标在0的位置
    # f.read(3)
    # print(f.tell())  # 获取光标的位置
    f.seek(10)
    print(f.read())
    f.close()
    
    # seek(0,2)  调整到光标的最后
    f = open('test', mode='r', encoding='utf-8')
    
    f.seek(0,2)
    print(f.tell())
    f.close()
    
  • readable writabe

    判断文件句柄是否可读,是否可写。

    f = open('test', mode='r', encoding='utf-8')
    # f.seek(0,2)
    # print(f.tell())
    print(f.readable())
    print(f.writable())
    f.close()
    
  • flush

    刷新,强制保存。

    f = open('test', mode='w', encoding='utf-8')
    f.write('旋哥很厉害')
    f.flush()
    f.close()
    

7.打开文件的另一种方式

  • with open('test', mode='r', encoding='utf-8') as f1:
        print(f1.read())
        # f1.close()  with语句会自动的关闭文件句柄。(有时间延迟)
    
    
    # 一个with语句可以同时操作多个文件,产生多个文件句柄。
    
    with open('test', mode='r', encoding='utf-8') as f1, \
            open('testa', mode='w', encoding='utf-8') as f2:
        print(f1.read())
        f2.write('fdjsalfdjsafjdksalf')
    

8.文件操作的改

  • 前提

    世界上所有的操作文件的软件,如果涉及到修改文件里面的内容,离不开下面的这5步:

    • 以读的模式打开原文件。
    • 以写的模式打开一个新文件。
    • 将原文件的内容读到内存进行修改形成新内容写入新文件。
    • 将原文件删除。
    • 将新文件重命名成原文件。
  • low

    import os
    
    # + 以读的模式打开原文件。
    # + 以写的模式打开一个新文件。
    with open('person', encoding='utf-8', mode='r') as f1,\
        open('person.bak', encoding='utf-8',mode='w') as f2:
        # + 将原文件的内容读到内存进行修改形成新内容写入新文件。
        old_content = f1.read()
        new_content = old_content.replace('太白金星', 'barry')
        f2.write(new_content)
    # + 将原文件删除。
    os.remove('person')
    # + 将新文件重命名成原文件。
    os.rename('person.bak', 'person')
    
  • 高大上版

    import os
    
    # + 以读的模式打开原文件。
    # + 以写的模式打开一个新文件。
    with open('person', encoding='utf-8', mode='r') as f1,\
        open('person.bak', encoding='utf-8',mode='w') as f2:
        # + 将原文件的内容读到内存进行修改形成新内容写入新文件。
        for old_line in f1:
            new_line = old_line.replace('barry', '太白')  # 'barry是靓仔。' ---> '太白是靓仔.'
            f2.write(new_line)
    # + 将原文件删除。
    os.remove('person')
    # + 将新文件重命名成原文件。
    os.rename('person.bak', 'person')
    #
    
    #------------------
    
    with open('testa',encoding='utf-8',mode='w') as f1:
        f1.write('1111')
        f1.close()
    
     with open('testa',encoding='utf-8',mode='w') as f2:
        f2.write('2222')
        f2.close()
    
    with open('testa',encoding='utf-8',mode='w') as f3:
        f3.write('1111')
        f3.write('2222')
        f3.write('11311')
        f3.write('11543511')
        f3.write('11543511')
        f3.write('43675')
        f3.coose()
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值