首页 > 其他分享 >文件光标及修改/函数

文件光标及修改/函数

时间:2023-07-07 11:47:20浏览次数:35  
标签:函数 read len 修改 print txt open 光标

文件内光标的移动(了解)

1.关于read

创建一个文件是 a.txt,里面是:大家好 hello

with open(r'a.txt','r',encoding='utf8') as f:
    print(f.read(3))    #read在文本模式下是读取指定字符个数   大家好


with open(r'a.txt', 'rb') as f:
    print(f.read(9).decode('utf8'))  #在rb模式下,3bytes表示一个字符数 大家好

 

(1) read在二进制模式下 括号内的数字表示的是读取指定的字节数
(2)unicode所有的字符都是用2bytes来起步表示
(3)utf8中文用3bytes来表示 英文用1bytes来表示 往后unicode可以不做研究 只研究utf8、gbk等编码即可

2.控制光标的移动  seed

t模式

with open(r'a.txt','r',encoding='utf8') as f:
    print(f.read())    #大家好 hello
    f.seek(3,1)  #表示走3个字节书(而非字符),3个字节表示一个汉字,1表示从当前位置开始
    print(f.read())    #家好 hello
b模式

     with open(r'a.txt', 'rb') as f:
         print(f.read(3).decode('utf8'))  #大
         # f.seek(3, 1)  # 1表示基于当前位置     3表示继续往后移动三个字节
         f.seek(-3, 2)  #2表示 基于文件末尾      -3表示往前移动三个字节
         print(f.tell())  # 获取光标基于文件开头的字节数
        

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='')

 文件的修改

硬盘上的数据有两个状态(了解)
占有态与自由态
我们删除数据其实就是将数据原来的位置标记成自由态
之后如果有新的数据进来了并且落到了自由态位置那么直接覆盖
ps:自己不用的手机和电脑 不要轻易的卖掉
先删除所有的数据 然后找一些无关紧要的数据存储一遍(比如500G的葫芦娃)
之后再删除一次 这样的话就算别人拿到了恢复了好几天打开一看居然是"葫芦娃 葫芦娃 ..."心里问候你全家

 with open(r'b.txt', 'r+t', encoding='utf8') as f:    (r+t模式是同时具备读和写的能力)
f.seek(9) # 不写模式 默认是0模式 基于文件开头后移动3个字符
f.write('<妇女主任>')

文件数据在硬盘上其实是刻死 不可能从中间再添加新的内容

只能将老内容移除 刻新的

 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
# 优点: 在文件修改过程中同一份数据只有一份
# 缺点: 会过多地占用内存
 with open('b.txt', 'r', encoding='utf8') as f:
     data = f.read()
 with open('b.txt', 'w', encoding='utf8') as f:
     f.write(data.replace('张一蛋', 'jason'))
# 实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,
# 删掉原文件,将临时文件重命名原文件名(狸猫换太子)
# 优点: 不会占用过多的内存
# 缺点: 在文件修改过程中同一份数据存了两份
import os  # 模块(后面会学)

with open('b.txt', 'r', encoding='utf') as read_f, \
        open('.b.txt.swap', 'w', encoding='utf8') as wrife_f:
    for line in read_f:
        wrife_f.write(line.replace('jason', 'jerry'))
os.remove('b.txt')  # 删除文件
os.rename('.b.txt.swap', 'b.txt')  # 重命名文件

函数简介

"""如何查看内部源码  ctrl+左键点击"""

######################函数与循环的区别#######################
# 我们需要在不同的地方 反复执行相同的代码>>>:函数  eg       len()
# 我们需要在相同的地方 反复执行相同的代码>>>:循环  eg        while Ture
##########################################################

def my_len():             #我们定义的len
    n = 0
    for i in s:
        n += 1
    print('字符串中字符的个数', n)
 print(my_len())   #None        


s = 'hello world'             #真正的len
print(len(s))  #11


上述代码与真正的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  语法错误定义的时候就会报错
调用函数需要使用函数名加括号

 

标签:函数,read,len,修改,print,txt,open,光标
From: https://www.cnblogs.com/Milk1/p/17532634.html

相关文章

  • MySQL中常用的字符串函数
    1.字符串拼接concat(str1,str2,...):将str1,str2...等多个字符串拼接成一个长字符串,如果有任何一个参数为NULL,则返回值为NULLconcat_ws(separator,str1,str2,...):指定分隔符,将多个字符串拼接成一个长字符串,如果有任何一个参数(包括分隔符)为NULL,则返回值为NULLgroup_concat(dis......
  • C++ 中的函数重载
     在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。https://www.121mu.com/bkjq211/......
  • 【快应用】快应用学习之页面周期函数onBackPress无法触发?
    ​【关键词】onBackPress、退出提示 【问题背景】在学习和调试快应用的过程中,我在子页面中的onBackPress()函数中定制了退出的一个弹框提醒,将它作为组件引入父页面中,弹框却无法触发?问题代码如下:子页面<template><!--Onlyonerootnodeisallowedintemplate.--><......
  • 修改默认alert样式
     alert简单的弹窗,常用于调试时判断代码执行到哪里出问题(类似断点)例子:alert("11111")this.$aleretthis.alert()方法用于显示带有一个标题,一条指定消息,一个关闭按钮和一个确定按钮的警告框。例子:this.$alert(`hhhhhhh`,'biaoti',{confirmButtonText:'......
  • redis的订阅发布功能中,前端如何监听到消息,并修改前端页面。
    ......
  • 生成函数
    看了网上一些博文,总觉得写得很乱。最近刚好学习了相关内容,决定亲自动手写一篇。前置知识多项式表达式: 以下内容仅需了解:卷积(多项式乘法),多项式求逆,多项式ln,多项式exp,牛顿迭代...(当然,这是不可能的)分治+NTT比较厉害的一个技巧。给定n个一次多项式ai +bix,......
  • 积性函数
     积性函数的定义:如果算数函数f对于任意两个素数p,q均有f(pq)=f(p)f(q),那么称算数函数f为积性函数在狄利克雷卷积中较常见的几种函数:1.单位函数  id(n)=n2.幂函数  Ik(n)=nk3.元函数  ε(n)=(n==1?1:0)4.因数和函数  σ(n)=sum(d)(n/d)5.约数个数  d(n)=sum(1)(n......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
        在培养农村高中生利用二次函数模型构建来对数学问题进行分析及求解意识的基础上,为了进一步锻炼学生的模型建构能力,帮助他们可以突破实际问题求解中的具体含义及意义,快速找到求解实际问题中的关键突破口,以及二次函数模型建构的视角与思维,这时候还要在数学教学中有计划......
  • ES6 的 新特性 3 箭头函数
    箭头函数的作用:1.比function这种写法更加简洁;2.可以解决thsi指向的问题,因为它不会创建自己的this,而是继承上一级作用域的this。使用场景:1.当函数内部不需要用到this的时候,都可以用箭头函数代替function;2.需要this,但是需要的是上一级作用域的this。箭头函数的几种写法:......
  • 时间处理函数
    /***个位数,加0前缀*@param{*}number*@returns*/importdayjsfrom'dayjs';exportnamespacetime{exportfunctionaddZeroPrefix(number){returnnumber<10?`0${number}`:number;}//functionaddZeroPrefix(n){......