zoukankan      html  css  js  c++  java
  • 第一阶段:Python开发基础 day11 python基础知识--文件的操作函数的使用

    上节课内容回顾

    字符编码

    二进制和字符之间的转换过程 --> 字符编码

    ascii,gbk,shit,fuck 每个国家都有自己的编码方式

    美国电脑内存中的编码方式为ascii ; 中国电脑内存中的编码方式为gbk , 美国电脑无法识别中国电脑写的程序 , 中国电脑无法识别美国电脑写的程序

    现在硬盘中躺着 ascii/gbk/shit/fuck 编码的文件, 他们的编码格式已经无法修改了, 所以内存中出现unicode编码, 内存中的unicode编码方式可以识别 ascii/gbk/shit/fuck 编码的文件

    用unicode编码方式运行了 ascii/gbk/shit/fuck 编码的文件, 最后还是要装入硬盘, 装入硬盘早期用unicode存进去,但是 他在识别ascii的时候, 会把8位数字转换成16位数字存入硬盘, 浪费空间, 所以出现了utf8(与unicode对应,并且压缩unicode编码的字符)

    utf8 能识别其他国家的编码,只识别unicode, utf8目前还不能放在内存,. 但是现在写的代码都是utf8, 历史遗留ascii/gbk/shit/fuck 编码的文件迟早消失/淘汰,要么被转换成utf8格式.所以迟早有一天内存中也是utf8.

    python2 和 python3字符编码的区别

    1. 打开python解释器
    2. python解释器相当于文本编辑器,读取二进制转化为普通字符 a = 1
    3. 对转化后的普通字符进行解释(定义变量就要新开辟内存空间存放变量)

    python2

    用文件指定的编码方式存储定以后的变量

    python3

    用unicode编码方式存储定以后的变量

    以后写文件以什么格式存储,就以什么格式读取

    文件的 三种打开方式

    r: 只读 read

    w:只写 write 清空后写入(文件不存在自动创建)

    a:追加(文件不存在自动创建)

    文本模式:t

    二进制模式:b

    t/b无法单独使用,只能和r/w/a一起使用

    with管理文件上下文

    with open() as f: # 自动关闭

    一、文件的两种方式

    文件的数据是存放于硬盘上的,因而只存在覆盖,不存在修改这么一说,我们平时看到饿的修改文件,都是模拟出来的效果,具体的说有两种实现方式。

    1.1 方式一

    将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)。

    import os
    
    with open('37r.txt') as fr, 
            open('37r_swap.txt', 'w') as fw:
        data = fr.read()  # 全部读入内存,如果文件很大,会很卡
        data = data.replace('tank', 'tankSB')  # 在内存中完成修改
    
        fw.write(data)  # 新文件一次性写入原文件内容
    
    # 删除原文件
    os.remove('37r.txt')
    # 重命名新文件名为原文件名
    os.rename('37r_swap.txt', '37r.txt')
    print('done...')
    

    done...

    1.2 方式二

    将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件。

    import os
    
    with open('37r.txt') as fr,
            open('37r_swap.txt', 'w') as fw:
        # 循环读取文件内容,逐行修改
        for line in fr:
            line = line.replace('jason', 'jasonSB')
            # 新文件写入原文件修改后内容
            fw.write(line)
    
    os.remove('37r.txt')
    os.rename('37r_swap.txt', '37r.txt')
    print('done...')
    

    done...

    总而言之,修改文件内容的思路为:以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,达到以假乱真的目的。

    二、定义函数的三种方式

    2.1 无参函数

    定义函数时参数是函数体接收外部传值的一种媒介,其实就是一个变量名

    在函数阶段括号内没有参数,称为无参函数。需要注意的是:定义时无参,意味着调用时也无需传入参数。

    如果函数体代码逻辑不需要依赖外部传入的值,必须得定义成无参函数。

    def func():
        print('hello nick')
        
    func()  # hello nick
    

    2.2 有参函数

    在函数定义阶段括号内有参数,称为有参函数。需要注意的是:定义时有参,意味着调用时也必须传入参数。

    如果函数体代码逻辑需要依赖外部传入的值,必须得定义成有参函数。

    def sum_self(x, y):
        """求和"""
        res = x+y
        print(res)
    
    sum_self(1,2)  # 3
    

    2.3 空函数

    当你只知道你需要实现某个功能,但不知道该如何用代码实现时,你可以暂时写个空函数,然后先实现其他的功能。

    def func():
        pass
    

    三、今日课后练习

    https://www.cnblogs.com/foreversun92/p/11323525.html

    今日总结

    今天主要学习了文件的两种修改方式,函数三种定义。

  • 相关阅读:
    java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)
    A计划(三维dfs)
    最少拦截系统(线性dp)
    疯狂的采药(完全背包)
    Modular Inverse (拓展欧几里得求逆元)
    斐波那契数列的3种求法及几种素数筛法
    Magic Odd Square (思维+构造)
    Marlin (思维)
    qdu_组队训练(ABCFIJK)
    2018蓝桥编程题6-9+ 50%的10
  • 原文地址:https://www.cnblogs.com/foreversun92/p/11324333.html
Copyright © 2011-2022 走看看