zoukankan      html  css  js  c++  java
  • 文件处理

    文件处理:

       1、什么是文件

         操作系统提供给你一个操作硬盘的接口

      2、为什么用文件

        计算机需要永久保存数据

      3、怎么用文件

        open()

        f = open('文件路径','打开文件的模式','指定的字符编码')

        f.close() #回收操作系统的资源

    文件路径:

      相对路径: 在当前文件同目录及以下都可以

      绝对路径:D:Program Files (x86)pythonPython13期day07a.txt

    文件上下文处理:

      with open('文件路径','打开文件的模式','指定的字符编码')as f:

      pass

    文件打开模式:

      r:只读

        1、只能读,不能写

        2、如果文件不存在的话,就会报错

      w:只写

        1、只能写,不能读

        2、如果文件不存在的话,会创建新文件

        3、如果文件存在的话,会清空原文件,再写入新文件

      a:追加值

        1、只能写,不能读

        2、如果文件不存在的话,会创建新文件

        3、如果文件存在的话,会在原文件数据的末尾追加新数据

      文件处理模式:

        t:文本模式

          只能与rwa连用

          默认情况下,是rt模式

        b:bytes模式

          只能与rwa连用

          处理二进制数据

    文件处理的内置方法:

      读:

        f.read() #读文件;一次性读出所有数据

        f.readline() #一次读一行

        f.readlines() #将数据全部读入内存,以换行符分隔,存入列表

        f.readable() #是否可读

      写:

        f.write #写文件

        f.writeable #是否可写

        f.writelines() #for + f.write()

        for line in f:

        pass

        r:防止转义

    操作文件流程

      打开

        1、open(需要结尾close关闭,否则占用内存)

    f = open('a.txt')
    f = open(r"E:Python正式班练习代码day7a.txt")# 注意需要要用r防止转义
    f.close()# 回收操作系统的资源

        f:文件句柄

    2、with open (不需要用close结尾关闭文件)

        可以同时打开多个文件,with未执行完前读取文件读不出

    with open(r'th.jpg',mode='rb')as rf,open('lixiaoran.png',mode='wb')as wf:
    with open("a.txt") as f:# as 的作用是将赋值给f
    with open(r'E:Python正式班练习代码day7a.txt') as f:# 注意需要要用r防止转义

      打开文件需指定的参数

      1、文件路径

      2、指定处理模式

      3、指定操作文本的字符编码encoding=“ ”

    with open("a.txt", mode='rt',encoding='utf8') as f:    
        print(f.writable())    
        print(f.readable())    
        print(f.read())

    打开文件的模式

      纯净模式

       1、r:(默认)只读模式

        1、默认mode = "rt"时要指定操作文本的字符编码encoding=“ utf-8”

        2、读出二进制字节mode = "rb" ,不要指定encoding

        3、读取文件如果文件不存在,会报错

      r模式下的内置方法:

        f .read() :全部一次性读出来

        f.readable():判断是否可读

        f.readline() :执行一次读一行

        f.readlines() :全部读出来,按照列表的形式把每一行作为元素读出来,并且把 换行符也会一并读出

    with open(r"E:Python正式班练习代码day7as.txt", "r", encoding='utf-8') as f:                 print(f.read())
        # print(f.readline())# 执行一次读一行
        # print(f.readline())
        # print(f.readline())
        # print(f.readline())
        # print(f.readline())
        print(f.readlines())# 全部读出来,按照列表的形式把每一行作为元素读出来
    with open("a.txt","rb") as f1:
        print(f1.read())

    2、w:(慎用)只写模式

      1、如果文件不存在则建立一个新的文件,如果文件存在则清空文件内容重新写入

      2、只写一个"w"默认是”wt",写成二进制字节为"wb"

    f.write():只能写一个字符串,并且会清空之前的文件内容
    
    f.writable():判断是否可写
    
    f.writelines():按照列表的形式,加数据到原文件中,也会清空原文件中数据 ,for + f.write()
    
    with open("a.txt", "w", encoding='utf-8') as f:    
        # f.write("你好,上海")    
        f.writelines(["你好
    ",'上海'])

    3、a:只追加写

      1、如果文件存在则在数据后追加数据

    2、如果文件不存在会新建一个文件写入数据

    with open("a.txt", "a", encoding='utf-8') as f:
      f.write(" hello,上海")# 是表示换行

    +模式(了解)

    都是可读可写的,并且保留自身原有的特性

    1、r+:可读可写,但是写时没有文件不会创建新文件

    2、w+:可读可写,无文件时会创建新的文件

    3、a+:光标永远在最后追加读写

    处理模式

    必须结合r,w,a模式下使用

    1、t:text文本模式

    只能针对文本文件,读写文件只能以字符串为单位,一定要指定encoding

    2、b:bytes二进制模式

    可以读写任意文件,是以bytes二进制为单位,不要指定encoding

    with open(r"timg.jpg",mode="rb") as f1,open(r"小黄人.png",mode="wb") as f2:
    #    xiao = f1.read()
    #    f2.write(xiao)
        for xiao in f1:
            f2.write(xiao)

    读写文本文件时,使用t模式自动帮我们编码和解码了,但是其他格式的文件,必须要用b模式,需手动解码编码

    文件的光标移动

    f.seek(光标移动的位数相对偏移度,指定光标从何开始)

    f.seek(offset,whence)
    offset: 相对偏移度 (光标移动的位数)针对的是字节
    whence:指定光标位置从何开始
      0:从文件开头(t模式下只能是0)
      1:从当前位置
      2:从文件末尾

    t模式下只能指定0,如果指定1、2那光标移动位数只能是0,从文件头开始,

    b模式下可以是0,1,2都可以使用

    b模式下需要解码才能正常读出来

    gbk中一个中文字符是2个字节,一个英文字符是一个字节

    utf-8中一个中文字符是3个字节,一个英文字符是一个字节

    with open(r'a.txt', mode="rb") as f:
        f.seek(6,0)
        print(f.read(3).decode("utf-8"))
        f.seek(6,1)
        print(f.read(6).decode("utf-8"))
        f.seek(-8,2)
        print(f.read(6).decode("utf-8"))
    ​
    with open(r'a.txt', mode="r",encoding="utf-8") as f:
        f.seek(6,0)
        print(f.read(1))
        f.seek(0,1)
      print(f.read(1))

    修改文件内容

    硬盘中的数据没法修改,更新都是新内容覆盖旧内容,内存中的数据可以修改

    所以我们修改数据都是将硬盘中的数据读到内存中进行修改

    具体的两种方式:

    1、将文件数据全部读到内存然后修改

    优点:同一份数据只有一份进行修改

    缺点:过多的占用内存空间

    with open(r"a.txt",mode="rt",encoding="utf-8") as f1:
        data = f1.read()
    with open(r"a.txt",mode="wt",encoding="utf-8") as f2:
        data2 = data.replace("上海","DSB")
        f2.write(data2)

    2、以读的模式打开,以临时文件写入,写入后将原文件删除,临时文件重命名

    需调用os模块

    优点:不会占用过多内存

    缺点:文件修改中同一份数据存了两份

    import os
    with open(r"a.txt",mode="rt",encoding="utf-8") as f1,
            open(r"b.txt",mode="wt",encoding="utf-8") as f2:
        for i in f1:
            f2.write(i.replace("DSB","大上海"))
    os.remove("a.txt")
    os.rename("b.txt","a.txt")
  • 相关阅读:
    Ionic Tabs
    Ionic实战九:ionic视频播放
    Ionic实战八:ionic登陆页面源码
    Ionic实战七:Ionic 音乐以及社交页面
    Ionic实战六:日期选择控件
    Ionic实战五:ionic图表源码基于highcharts
    Ionic实战四:ionic 即时通讯_ionic仿雅虎邮箱
    Ionic实战三:Ionic 图片预览可放大缩小左右滑动demo-iClub图片预览
    Ionic实战二:购物车
    编译错误总汇
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11823309.html
Copyright © 2011-2022 走看看