zoukankan      html  css  js  c++  java
  • Python文件高级应用和如何使用函数

    文件的高级应用

    一、可读可写

    • r+t: 可读、可写
    • w+t: 可写、可读
    • a+t: 可追加、可读

    二、文件内指针移动

    假设我们需要在文件内容中间的某一行增加内容,如果使用基础的r/w/a模式实现是非常困难的,因此我们需要对文件内的指针进行移动。

    with open('36r.txt', 'r+t', encoding='utf-8') as fr:
        fr.readline()
        fr.write('nick 真衰呀')  # 写在文件的最后一行
    

    硬盘上从来没有修改一说,硬盘上只有覆盖,即新内容覆盖新内容。

    1.seek(offset,whence): offset代表文件指针的偏移量,单位是字节

    # seek()
    with open('36r.txt', 'rt', encoding='utf-8') as fr:
        print(f"fr.seek(4, 0): {fr.seek(3, 0)}")  # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾
        # fr.seek(0,2)  # 切换到文件末尾
    fr.seek(4, 0): 3
    

    2.tell(): 每次统计都是从文件开头到当前指针所在位置

    # tell()
    with open('36r.txt', 'rt', encoding='utf-8') as fr:
        fr.seek(4, 0)
        print(f"fr.tell(): {fr.tell()}")
    fr.tell(): 4
    

    3.read(n): 只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数

    # read()
    with open('36r.txt', 'rt', encoding='utf-8') as fr:
        print(f"fr.read(3): {fr.read(3)}")
    fr.read(3): sdf
    

    4.truncate(n): truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

    # truncate()
    with open('36r.txt', 'r+t', encoding='utf-8') as fr:
        fr.truncate(3)
    

    文件修改的两种方式

    将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(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...
    

    二、

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

    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...
    

    函数

    一、什么是函数

    在程序中,函数就是具备某一功能的工具,事先将工具准备好就是函数的定义,遇到应用场景拿来就用就是函数的调用,所以需要注意的是:

    二、为什么要用函数

    如果不使用函数,写程序时将会遇到这三个问题:

    1. 程序冗长
    2. 程序的扩展性差
    3. 程序的可读性差

    三、如何使用函数

    先定义函数,后调用。

    • 定义函数:
    def 函数名(param1、param2……):
        """
        函数功能的描述信息
        :param1:描述
        :param2:描述
        :return:返回值
        """
        code 1
        code 2
        code 3
        ...
    
        return 返回值
    
    • 调用函数
    函数名(param1、param2……)
    

    定义函数的三种形式

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

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

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

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

    二、有参函数

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

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

    三、空函数

    def func():
        pass
    

    函数的返回值

    什么是函数的返回值:

    def func():
    	代码块
    	return 
    

    我们都知道函数是一段代码的实现或者是一个工能的实现,而我们每次使用都需要函数返回一些我们需要的东西,这个时候用return语句就可以返回我们所需要的东西

  • 相关阅读:
    [Leetcode] 120. Triangle
    [Leetcode] 97. Interleaving String
    [Leetcode] 96. Unique Binary Search Trees
    [Leetcode] 91. Decode Ways
    [Leetcode] 338. Counting Bits
    CNN中减少网络的参数的三个思想
    [Leetcode] 17. Letter Combinations of a Phone Number
    [Leetcode] 220. Contains Duplicate III
    [Leetcode] 232. Implement Queue using Stacks
    mysql触发器(Trigger)简明总结和使用实例
  • 原文地址:https://www.cnblogs.com/ledgua/p/11321205.html
Copyright © 2011-2022 走看看