• Python中的文件操作


    一:文件的打开模式

    了解过字符编码都知道,文件都是以某一种标准编码成二进制存在硬盘里的,在文件的默认打开模式下f = open('a.txt','rt',encoding='utf-8') 其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符;如果是以b模式打开文件的话,open方法不会对操作系统返回的二进制数据作处理,而是直接打印。

    f = open('a.txt','rt',encoding='utf-8') 

    其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符,那么在b模式下打开文件,操作系统返还直接是一串二进制数字

    文件的三种打开方式:

    只读模式:‘r’

    只写方式:'w'

    追加模式:'a'

    以字节模式打开文件的话,需要注意:

    一定要写上‘b’,只能以rb,wb,ab这种形式打开文件,不能省略‘b’。

    f = open('a.txt','rb')   
    f = open('a.txt','wb') 
    f = open('a.txt','ab') 
    #错误写法
    f = open('a.txt','r') #未注明以b模式打开,这种写法是默认文本模式打开 
    f = open('a.txt','rb',encode = 'utf-8')  #b模式打开,不能传入编码方式

    字节模式下读写都是以bytes为单位的。如果想写入字符,需要编码后以字节类型写入

    f = open('a.txt','wb')
    f.write('你哈'.encode('utf-8'))

    注意:对于非文本文件,我们只能使用字节模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

    二:字节模式下的操作

    字节模式打开非文本文件

    with open('1.jpg', 'rb') as f:  # 以只读模式打开文件
        data = f.read()             # 读取文件全部内容,并赋值给变量data
    print(data)                     # 打印变量,我们得到是b'xffxd8xffxe0x00这种形式的结果
    print(type(data))               # 变量的类型<class 'bytes'>
    
    with open('1.jpg','rb') as f:
            data = f.read()
    print(type(data))
    print(data.decode('utf-8'))      #将读取的编码以utf-8标准解码
                                     #图片文件编码方式不是utf-8,所以不能解码,程序报错

    以字节模式打开文本文件:

    with open('db.txt', 'rb') as f:  
        data = f.read()
    print(data)                  # 打印出来的是一串二进制数
    print(data.decode('utf-8'))  # 把二进制数用utf-8标准解码
    print(type(data))            # 可以在屏幕上显示人类能看懂的字符了
    
    with open('db.txt', 'wb') as f:
        f.write('你好啊
    '.encode('utf -8')) 
    在以字节打开文件时,文件的操作都要基于二进制进行了.

    三:文件的修改  

    文件的修改并不是我们直观感受上的擦除重新写上,基于硬盘的特性,任何文件的修改操作都是新内容对原内容的覆盖。修改的概念存在于内存中,当应用程序启动,请求操作系统从硬盘中读取数据,读取的数据运行在内存上,这时,我们在应用程序上的操作修改类内存上的数据内容,但是并不影响到硬盘的数据。当我们点击保存时,新的数据会将原数据覆盖。这时,才完成了文件的修改。

    修改文件方式一:
      1:先把文件内容全部读取
      2:在内存中修改
      3:把修改好的内容覆盖写入到硬盘上

    with open("db.txt", "r", encoding="utf-8") as f:   # 打开文件
        data = f.read()                                # 读取文件全部内容
        data = data.replace("你好啊:", "======")        # 修改文件内容
        
    with open("db.txt", "w", encoding="utf-8") as f:   # 以‘w’模式打开,清空文件
        f.write(data)                                  # 把修改后的数据写入

    修改文件方式二:
      1:以读的方式打开源文件
      2:以写的方式打开一个新文件

    import os  # 引入os模块
    
    with open('a.txt', 'r', encoding='utf-8') as read_f, 
            open('new.txt', 'w', encoding='utf-8') as new_f:  # 同时打开文件
        for line in read_f:                                   # 循环原文件内容
            if '你好啊' in line:
                line = line.replace('你好啊', '哈哈哈哈哈哈')  # 替换源文件内容
            new_f.write(line)                               # 把原文件循环出来的内容写入到新文件中,
            
    os.remove('a.txt')                                      # 调用OS模块功能删除原文件
    os.rename('new.txt', 'a.txt')                           # 重命名新文件
    Ideal are like the stars --- we never reach them ,but like mariners , we chart our course by them
  • 相关阅读:
    架设某大型网站服务器之全部过程
    利用js实现页面关闭时发送http请求
    用jquery解析JSON数据的方法
    在创业公司工作四年,如何赚百万
    一个http请求的详细过程
    VIM 查找替换命令的使用
    swfobject
    获取并显示某目录下的图片
    Windows下架设Subversion服务器
    OA系统概念(办公自动化系统)
  • 原文地址:https://www.cnblogs.com/li1992/p/8633417.html
Copyright © 2020-2023  润新知