zoukankan      html  css  js  c++  java
  • python基础(六)-文件操作与函数简介

    今日内容

    其他文本模式补充

    • r+ 可读可写
    • w+ 可读可写
    • a+ 可读可写

    另外,rwa为纯净模式

    rt模式下,read内( )中的数字表示的是字符的个数;除此之外,数字表示的都是字节

     

    控制文件内容光标的移动

    with open(r'test','r',encoding='utf-8') as f:
    
      f.seek(offset,whence)

    offset

    • 相对偏移量,光标移动的位数

    whence

    • 0:参照文件的开头,t和b模式都可以使用
    • 1:参照光标所在的当前位置,只能在b模式下用
    • 2:参照文件的末尾,只能在b模式下使用
    with open(r'test','rt',encoding='utf-8') as f:
    
      print(f.read(1))
    
      f.seek(6,0)  # seek移动的都是字节数
    
      print(f.read(1))
    
      f.seek(0,0)  # 移动到首位
    
      print(f.read(1))

     

    with open(r'test','rb',encoding='utf-8') as f:
    
      print(f.read(3).decode('utf-8'))
    
      f.seek(0,0)
    
      print(f.read(3).decode('utf-8'))
    with open(r'test','rt',encoding='utf-8') as f:
    
      print(f.read(3))
    
      f.seek(1,1)
    
      print(f.read(1))  # 报错,此时光标已在最末位,无法再读取
    with open(r'test','rb',encoding='utf-8') as f:
    
      print(f.read(3))
    
      f.seek(3,1)
    
      print(f.read(1))
    with open(r'test','rt',encoding='utf-8') as f:
    
      print(f.read())
    
      f.seek(3,2)
    
      print(f.read(1))
    
      f.seek(-3,2)
    
      print(f.read())
    with open(r'test','a',encoding='utf-8') as f:
    
      print(f.read())
    
      f.seek(3,2)
    
      print(f.read(1))
    
      f.seek(-3,2)
    
      print(f.read())

     

    实时监测文件内容变化

    import time
    
    res = time.strftime('%Y-%m-%d %X')
    
    print(res,type(res))
    
    with open(r'test','a',encoding='utf-8') as f:
    
      f.write('%s egon给jason发了一个亿的工资
    '%res)

    进阶:实时检测是否有新内容增加

    with open(r'test01.txt','rb',encoding='utf-8') as f:
    
      f.seek(0,2)  # 先将光标移动到文件末尾
    
      while True:
    
        res = f.readline()
    
        print(f.tell())  # 查看光标移动了多少位(字节)
    
        if res:
    
          print('新增的文件内容:%s'%res.decode('utf-8'))
    
    # if如果res有值,说明有人操作当前文件
    
        else:
    
    # 如果res没有值,说明文件没有被任何人操作
    
          print('暂无其他人操作文件')
    
      print(f.read())

    截断文件:

    with open(r'test','a',encoding='utf-8') as f:
    
      f.truncate(6)  # 保留0~6字节数,后面的全部删除(截断)。接收的字节的长度,必须为int整型数据

    文件修改:

    先将数据由硬盘读到内存(读文件),在内存中完成修改(字符串的替换),再覆盖原来的内容(写文件)。

    注意:同一个文件不能同时使用两种模式(rwa),不能既读又写。

    • 1)文件修改方式1:类似于覆盖
    with open(r'test','r+',encoding='utf-8') as f:
    
      f.seek(6,0)
    
      f.write('')

     

    with open(r'test','r',encoding='utf-8') as f:
    
      data = f.read()
    
      print(data)
    
      print(type(data))
    with open(r
    'test','w',encoding='utf-8') as f:   res = data.replace('egon','jason')   print(data)   f.write(res)

    '''

    但是上面这种方法也有优缺点;

    优点:任何时候,硬盘上只有一个文件,不会占用过多的硬盘空间

    缺点:当文件过大时,可能会造成内存溢出

    '''

    • 2)文件修改方式2:类似于搬运

    创建一个新文件,循环读取老文件内容到内存进行修改,将修改好的内容写到新文件中,将老文件删除,将新文件的名字改成老文件名字。

    import os  # 调用os模块
    
    with open(r'test1','r',encoding='utf-8') as read_f,
    
    open(r'test2','a',encoding='utf-8') as write_f:
    
      for line in read_f:
    
      new_line = line.replace('jason','egon')
    
      write_f.write(new_line)
    
    os.remove('test1')
    
    os.rename('test2','test1')

    '''

    这种方式也有优缺点:

    优点:内存中始终只有一行内容,不占内存

    缺点:在某一时刻,硬盘上会同时存在两个文件,占用硬盘空间,但是这个时间段很短

    '''

     

    函数简介

    什么是函数?

      函数就是工具,函数必须先定义后调用(函数名+括号)

    为什么要有函数?(待定)

    如何是使用函数?(待定)

     

    函数体代码定义阶段只检测语法,不执行代码

    def my_len()  # def为定义函数的关键字
    
      n = 0
    
      for i in l:
    
        n += 1
    
        print(n)
    
    my_len()
    
    print(my_len())

    '''

    可以通过变量名找到变量对应的值;

    可以通过函数名+括号,找到函数体所对应的代码并执行;

    函数名的命名规则与变量名相同;

    '''

  • 相关阅读:
    【转】Windows Phone的应用程序认证要求
    ObservableCollection删除问题
    国庆总结?
    .net dll破解实战
    理理头绪
    创建Metro风格的WPF界面
    Alpha项目测试
    原型设计
    团队项目总结
    最常用的35中心里效应
  • 原文地址:https://www.cnblogs.com/zhukaijian/p/11153109.html
Copyright © 2011-2022 走看看