当前位置 : 主页 > 编程语言 > 其它开发 >

Python文件与函数的语法结构

来源:互联网 收集:自由互联 发布时间:2022-05-30
文件内光标的移动 # 1.前戏 with open(r'a.txt','r',encoding='utf8') as f: print(f.read(3)) print(f.read(3)) # read在文本模式下 括号内的数字表示的是读取指定的字符个数 with open(r'a.txt', 'rb') as f: print(f.r
文件内光标的移动
  # 1.前戏
  with open(r'a.txt','r',encoding='utf8') as f:
      print(f.read(3))
      print(f.read(3))
  # read在文本模式下 括号内的数字表示的是读取指定的字符个数

    with open(r'a.txt', 'rb') as f:
        print(f.read(9).decode('utf8'))
        print(f.read(1).decode('utf8'))
  # read在二进制模式下 括号内的数字表示的是读取指定的字节数
  # unicode所有的字符都是用2bytes来起步表示
  # utf8中文用3bytes来表示 英文用1bytes来表示  往后unicode可以不做研究  只研究utf8、gbk等编码即可

  # 2.控制光标的移动
     with open(r'a.txt','r',encoding='utf8') as f:
         print(f.read())
         f.seek(3,1)
         print(f.read())

     with open(r'a.txt', 'rb') as f:
         print(f.read(3).decode('utf8'))
         f.seek(3, 1)  # 基于当前位置 继续往后移动三个字节
         f.seek(-3, 2)  # 基于文件末尾 往前移动三个字节
         print(f.tell())  # 获取光标基于文件开头的字节数
         print(f.read().decode('utf8'))
    """
    seek方法可以控制光标的移动 在文本模式下移动的单位也是字节数
    seek(offset,whence)
        offset:控制移动的字节数
        whence:控制模式
            0:相对于文件开头(让光标先移动到文件开头)
                支持文本模式和二进制模式
            1:相对于当前位置(让光标先停留在当前位置)
                只支持二进制模式
            2:相对于文件结尾(让光标先移动到文件末尾)
                只支持二进制模式
    """
    # 实时检测文件内是否有新增的内容并打印出来(没有太多的实际意义)
    with open('access.log', mode='rb') as f:
        f.seek(0, 2)
        while True:
            line = f.readline()
            if len(line) == 0:
                # 没有内容
                pass
            else:
                print(line.decode('utf-8'), end='')
文件修改
    """
    课前闲聊>>>:xx门事件
	硬盘上的数据有两个状态
	    占有态与自由态
		我们删除数据其实就是将数据原来的位置标记成自由态
		之后如果有新的数据进来了并且落到了自由态位置那么直接覆盖
    ps:自己不用的手机和电脑 不要轻易的卖掉
	先删除所有的数据 然后找一些无关紧要的数据存储一遍(比如500G的葫芦娃)
	之后再删除一次 这样的话就算别人拿到了恢复了好几天打开一看居然是"葫芦娃 葫芦娃 ..."心里问候你全家
    """
     with open(r'a.txt', 'r+t', encoding='utf-8') as f:
     f.seek(9)  # 不写模式 默认是0模式  基于文件开头 并且兼容文本和二进制
     f.write('<好好学习>')
    '''文件数据在硬盘上其实是刻死的 不可能从中间再添加新的内容 只能将老内容移除 刻新的'''

    # 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
    # 优点: 在文件修改过程中同一份数据只有一份
    # 缺点: 会过多地占用内存
     with open('a.txt', mode='r', encoding='utf-8') as f:
         data = f.read()
     with open('a.txt', mode='w', encoding='utf-8') as f:
         f.write(data.replace('张三', 'jason'))

    # 实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,
    # 删掉原文件,将临时文件重命名原文件名(狸猫换太子)
    # 优点: 不会占用过多的内存
    # 缺点: 在文件修改过程中同一份数据存了两份

    with open('a.txt', 'r', encoding='utf-8') as read_f, \
        open('.a.txt.swap', 'w', encoding='utf-8') as wrife_f:
    for line in read_f:
        wrife_f.write(line.replace('jason', 'jerry'))
    os.remove('a.txt')  # 删除文件
    os.rename('.a.txt.swap', 'a.txt')  # 重命名文件
函数简介
     """如何查看内部源码  ctrl+左键点击"""
    l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
    # 统计列表内元素的个数
     print(len(l1))
    '''突然len不让用了!!!'''
     n = 0
     for i in l1:
         n += 1
     print('列表内元素的个数', n)
    '''不需要len也实现了统计元素个数的方法 但是兼容性不强'''
    s = 'hello world'
    print(len(s))
     def my_len():
         n = 0
         for i in s:
             n += 1
         print('字符串中字符的个数',n)
    """
    虽然上述方式实现了不借助与len完成元素个数的统计
    但是需要反复的编写相同的代码
    """

  # 循环与循环的区别
    # 我们需要在不同的地方 反复执行相同的代码>>>:函数
    # 我们需要在相同的地方 反复执行相同的代码>>>:循环
 def my_len():
    n = 0
    for i in s:
        n += 1
    print('字符串中字符的个数', n)
 print(my_len())
    """
    上述代码与真正的len差距
        1.真正的len可以统计指定数据的元素个数
            而我们的len目前只能统计指定的数据
        2.真正的len执行完成后有结果
            而我们的len执行完成后结果是None
    """
    # 函数其实就相当于是工具 提前定义好之后可以用反复使用
           
    """
    # 没有函数的情况
        修理工在修理汽车的时候需要用扳手 当场架火炉 打铁 铸造出扳手 之后使用
        下次修理汽车再当场架火炉 打铁 铸造出扳手 之后使用
    # 有函数的情况
        修理工只需要提前准备好一个工具箱 里面提前购买好相应的工具 之后就可以反复使用
    """
    
    len是python解释器提前给我们写好的函数(工具)    我们只需要拿来使用即可 这种类型的函数称之为内置函数
    我们自己写的函数称之为自定义函数!!!
函数的语法结构
  def 函数名(参数1,参数2):
    '''函数的注释'''
    函数体代码
    return 返回值

  1.def	
  	是定义函数的关键字
  2.函数名
  	函数名类似于是变量名 指代函数体代码 命名与变量名一致
  3.括号
  	定义函数的时候 函数名后面肯定要先写括号
  4.参数
  	类似于使用函数的时候 给函数内部传递的数据 可以不写 或者单个、多个
  5.冒号
  	定义函数也需要有缩进的代码块
  6.函数的注释
  	用于解释函数的主要功能、使用方法等说明性文字
  7.函数体代码
  	函数的核心功能 也是我们将来编写的核心
  8.return
  	后面跟什么 那么执行完函数之后就会返回什么
   
  """
  定义函数需要使用def关键字
  	定义函数的过程不会执行函数体代码 只会检测语法
  		def index():
  			xsadasd  定义的时候不会报错
  		def index1():
  			if  语法错误定义的时候就会报错
  调用函数需要使用函数名加括号
  """
上一篇:机器学习—聚类5-1(K-Means算法+瑞士卷)
下一篇:没有了
网友评论