目录
前言
本篇博客整合了以下知识点
本篇博客以理论加实际 ,为我全方面解读。
知识点已经列出来了就开干吧
计算机的基础知识
计算机由以下几个主要部分组成
cpu:人类的大脑
内存 临时此处一些数据 解决硬盘和cpu 速度差
硬盘 永久存储数据
操作系统 一个特殊的程序 调度硬件和软件之间的数据交互
python入门的基础知识
python的种类(解释器)
Cpython:官方推荐解释器。可以转化成C语言能识别的字节码。(c) Jpython: 可以转化成Java语言能识别的字节码。(java) Ironpython:可以转化成.net语言能识别的字节码( c#) pypy:转换成 动态编译。(python)两块 开发快运行快 ipython 和cpython在终端上有一点区别
编程语言的种类
编译型:c,c++ 将代码一次性全部编译成二进制,然后再执行**。 优点:执行效率高。 缺点:开发效率低,不能跨平台。 代表语言:C 解释型:python,强累定义语言 逐行解释成二进制,**逐行运行**。 优点:开发效率高,可以跨平台。 缺点:执行效率低。不能加密 代表语言:python。 混合型 java
变量
简介
变量是一个便利贴
变量的命名规范
- 变量全部由数字,字母 下划线任意组合。(不行有,。;’【】等)
不能以数字开头。 - 不能是python的关键字。
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
- 要具有描述性。
常量
一般约定俗成不能改变 一般大写表示 python中没有真正的常量,为了应和其他语言的口味,全部大写的变量称之为常量。 将变量全部大写,放在文件的最上面。 设置一些不变的量 :身份证号,id, BIRTH_OF_CHINA = 1949
注释(重点)
文言文中对一些晦涩难懂的成语或者经典的出处 解释说明。便于你理解。 便于你理解对方的代码,自己的代码。 单行(单行)注释: # **注释的代码不执行** 多行注释: '''被注释内容''' """被注释内容"""#变成了字符串并没有引用 难以理解的代码后面,加注释。 函数,类,文件都需要注释,解释说明。 好理解
初识int str bool数据类型
int(整型):
普通的数字 1 ,2, 123, .... 可以基本运算 + - * /
str(字符串)
凡是用 引号 引起来的数据就称之为字符串。 '', "", ''' ''', """ """ # 单双引号可以配合使用 # 三引号:换行的字符串 # str + str *** 字符串的拼接 (都是字符串才可以) # str * int 字符串的相乘(字符串与数子)
bool
就是True False
type查看数据的类型
type() 查看属于什么类
input 与print 的注意事项
python3 input 获取的都是字符串 print()的几个参数 print(*objects, sep=' ', end='\n', file=sys.stdout) objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。 sep -- 用来间隔多个对象,默认值是一个空格。 end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。 file -- 要写入的文件对象。 \t代表tab键 \n代表换行
python的基本语法
if流程语法的基本结构
if 条件: #判断 缩进 结果 #条件成立后执行的(4个空格) # if{条件}{结果}
单分支
if 条件: 满足条件后要执行的代码
实列
if 2 < 1: print(666) print(222)
双分支
if 条件: 满足条件执行代码 else: if条件不满足就走这段
实列
age = input('请输入年龄:') if int(age) > 18: print('恭喜你,成年了') else: print('小屁孩儿')
多分支
if 条件: 满足条件执行代码 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 else: 上面所有的条件不满足就走这段
实列
num = int(input('猜点数:')) if num == 1: print('晚上请你吃饭') elif num == 3: print('一起溜达') elif num == 2: print('请你大宝剑') else:#以上都不符合条件 print('太笨了....') print('组合')
多选 纯if
if 条件: 满足条件执行代码 if 条件: 上面的条件不满足就走这个
实列
if 5>2: print(666) if 5>3: print(666)
嵌套的if
if 条件: if 条件: 满足条件执行代码
实列
username = input('请输入用户名:') password = input('请输入密码:') code = 'qwer' your_code = input('请输入验证码:') if your_code == code: if username == 'taibai' and password == '123': print('登录成功') else: print('账号或者密码错误') else: print('验证码错误')
在Python语言中,也有三元运算符。不过Python的三元运算符和java以及C#有所区别,语法格式为:
表达式1 if 条件表达式 else 表达式2
当表达式返回True时,返回结果表达式1,否则返回结果表达式2。示例:
c = a if a < b else b
for else
结果 for i in [1,2]: if i==2: break else: print(i) else: for i in range(6): print(i) 结果 for i in [1,2]: if i==2: break else: print(i) for i in range(6): `print(i)
while循环语句的基本语法结构
while 条件: 循环体
while循环语句终止运行的两种条件
- while 旁边的条件改变成为false
- 运行途中遇到continue break
改变条件实列
flag = True while flag: print('狼的诱惑') print('我们不一样') print('月亮之上') flag = False print('庐州月') print('人间')
遇到continue break实列
while else: while 循环如果被break打断,则不执行else语句。 count = 1 while count < 5: print(count) if count == 2: break count = count + 1 else: print(666) 在补充
3元运算符
# 三元与运算符: 简单的if else # c = a if a > b else b # def complie(a,b): # c = a if a > b else b # return c
格式化输出的3种方式
当你遇到这样的需求:字符串中想让某些位置变成动态可传入的,首先要考虑到格式化输出。
%s占位符方式
%s 字符串 %d int整型 %%(转义) 字符串格式化 不能多 不能少且要一一对应 name=input('>>>') #第一种 print('我的名字是%s'%(name))
{} 3.7后的方式
name=input('>>>') print(f'我的名字是{name}') f扩起来{}包占位的
format 方式
# name = "alex{}wusir{}" # name1 = name.format('结婚了',"要结婚了") # 按照位置顺序去填充的 # name = "alex{1}wusir{0}" # name1 = name.format('结婚了',"要结婚了") # 按照索引位置去填充 # name = "alex{a}wusir{b}" # name1 = name.format(a="结婚了",b="马上结婚") # 指名道姓 填充 # print(name1)
其他重要知识
运算符 与and运算
算数运算 +, - ,\* ,/ ,%, **幂,//取整 %取余 比较运算符 == , != , > ,< , >= , <= 赋值运算符 = ,+= ,-= ,\*= ,/= ,**= ,%= ,//= 逻辑运算符 and(与 -- 和) or (或) not (非 -- 不是) 成员运算符 in 在 not in 不在 身份运算 is是 is not 不是 # 在没有()的情况下,优先级:not > and > or,同一优先级从左至右依次计算 # and 运算 2都为真 and的后面*** # and 运算 2都为假 and的前面 # or 运算 2都为真 or的前面*** # or 运算 2都为假 or的后面 # and 运算 一真一假 取假 # or 运算 一真一假 取 真 一个等号代表的含义是赋值,将某一数值赋给某个变量,比如a=3,将3这个数值赋予给a。 两个等号是判断是否相等,返回True或False,比如1==1。他们是相等的,那么就返回true。1==2,他们是不相等的,那么就返回false。 is 判断id相同
数据类型之间的转换
# str ---> int : 只能是纯数字组成的字符串 s1 = '00100' print(int(s1)) # int ----> str i1 = 100 print(str(i1),type(str(i1))) # int ---> bool : 非零即True ,0为False。 i = 0 print(bool(i)) # bool ---> int print(int(True)) # 1 print(int(False)) # 0
编码的初识
计算机存储文件,存储数据,以及将一些数据信息通过网络发送出去,存储发送数据什么内容?底层都是01010101.
密码本:01010110 二进制与 文字之间的对应关系。
最早起的密码本:
英文1 欧洲2 亚洲3
ASCII码 只支持英文** 1字节 gbk 英1中2 Unicode 英2 中4 Utf-8 英文1 欧洲2 亚洲3
编码转化
bit是字位,也就是计算机存储数据的“0”、“1”,每个“0”、“1”都是一个字位。Byte是字节,是文件存储的最小单位,一个字节由八个字位组成,前七位是文件的名称,最后一位是校验位。1Byte=8bit,1KB=1024Byte,1MB=1024KB,1GB=1024MB,1TB=1024GB。 8bit = 1Byte****B 1024byte = 1KB 1024KB = 1MB 1024MB = 1GB 1024GB = 1TB 1024TB = 1PB 1024TB = 1EB 1024EB = 1ZB 1024ZB = 1YB 1024YB = 1NB 1024NB = 1DB 7.6MB ----> 7.6 * 1024 * 1024 * 8
for 循环语句
fro循环
len 内置函数
len()#获取长度
range内置函数
range #默认从0开始 可以步长 类似列表 顾头不顾尾 s = range(1,10) # 大坑 python2 和 python3 print(s) # 范围 range(1, 10)
python的基本数据类型以及方法
6大数据类型
- str
- bool
- int
- dict
- list
- tuple
- set
str数据类型
# 字符串 -- 用于存储数据的 -- 比较少 # python 中只要是用引号 引起来的就是字符串 # 支持索引(引取值的时候超出了索引的范围会报错),切片(切片如果终止位置超出了不报错),步长 注意事项 list('1234')#['1', '2', '3', '4']
str的方法
字符串方法 其实就是调用类的方法 字符串是数字不会报错 b=' aBdsfdfhgjkc6' # print(b.upper())# 全部大写 # print(b.lower())# 全部小写 # print(b.startswith('a')) # 以什么开头 # print(b.endswith("c"))# 以什么结尾 # print(b.count("zhu")) # 查询某个内容出现的次数 # b1 = b.replace('n','s',2) # 替换 2是替换的次数 第一个参数旧的 第2个新的 # b2 = b.strip('6') #返回移除字符串头尾指定的字符生成的新字符串 (只要头尾包含有指定字符序列中的字符就删除:) 默认去空格 # str.split(第1个参数,第2个参数) 返回列表 # 第1个参数 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。 # 第2个参数 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。 # is 系列 -- 判断 # print(name.isdecimal()) # 判断是不是十进制 -- 用它来判断是不是数字 # print(name.isalpha()) # 判断的是中文和字母 # print(name.isalnum()) # 判断的是不是字母,中文和阿拉伯数字 补充 str 首字母大写 capitalize() s1 = object.capitalize() 每个单词首字母大写 title() s = "alex wusir" s1 = s.title() 统计出现的次数count() print(s.count("a")) 大小写转换 swapcase() print(s.swapcase()) 利用元素找索引 find() print(s.find("c")) # find 查找不到的时候返回 -1 print(s.index("C")) # index 查找不到就报错
切片小列题
# 从左向右数 0,1,2,3 # 从右向左数 -1,-2,-3,-4 # a='123456789' # print(a[::3]) # print(a[1:5]) # print(a[0],a[-1])
bool数据类型
# bool # 布尔值 -- 用于条件使用 # True 真 # False 假 # print(bool(0)) # True 转化成数字 1 False 转换成数字 0 # 非0 非空(空字符串,空列表,空元祖,空集合,空字典) 就是True # print(type(str(True))) 布尔值可以转换成字符串
int数据类型
int可以运算 # print(num.bit_length()) # 求十进制数转换成二进制时所占用的位数 # 10进制转2进制 8421
list数据类型
# 什么是列表? 就是一个容器,任意类型都可以放到容器中 # list [] 多个元素 每个元素中间用,逗号隔开 # 有序的? 按照咱们写的顺序输出 支持切片,步长 # 可变的 -- 可以在本身上进行修改 可以增加 - 删除 - 修改 # 列表不能用insert #效率低了一个变后面都会变 补位 # 列表不能用pop(n) ##效率低了一个变后面都会变 补位
创建列表
# 创建列表3种方式 (列表推导式,自己创建) # 第一种 # l1 = [1,2,3,'123',True,[1,2,5]] # 第2种 # l1=[i for i in range(9)]
list增删改查
# 方法 l1 = [1,2,3,'alex',3,[1,2,3]] l1.append('sq') #追加 添加在末尾 添加的操作 l1.insert(0,"mcsq") #插入 第一个参数(索引),第二参数要插入的内容 l1.extend("abc") # 扩展 -- 迭代添加 -- for l2 = ["a","b","c"]+[1,2,3]# 列表合并["a","b","c",1,2,3] l3=[[]]*3#[[], [], []]列表相乘 # 删 # l1.remove(1) # 删除 按照元素名进行删除 # print(li.pop(索引)) # 弹 pop有返回值 返回的是被删除的内容# 默认删除的是最后一个# 可以通过索引指定删除 del l2#将整个容器都删掉了 # del l2[2] #del 支持索引删除 # del l2[0:3] #del 支持切片删除 # del l2[::2] # del 支持步长删除 # 清空 # li.clear() # 清空里面元素 列表还在 # 索引改 # li = [0,1,2,3,4,5] # # li[0:2] = [] # [2, 3, 4, 5] # 没有步长迭代进去的 可以多,可以少 # li[::2]=[1,2,3]#有步长,不可以多,不可以少 否则报错 # print(li)
列表的嵌套:
# 抽丝剥茧 补充方法 list l1=[1,2,3,4,5,6,6,5,4,3,2,1] list: 计数count() print(li.count("1")) 利用元素找索引 find() print(li.index("C")) # index 查找不到就报错 反转 reverse()原列表反转 l1.reverse() 排序 原列表升序或降序 li.sort() # 升序 li.sort(reverse=True)
tuple数据类型
# 元组 # 元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变 # 只有当元组内的所有元素都为不可变类型的时候,才能成为字典的key # 小括号中一个元素的时候没有逗号就括号中元素的本身 # 小括号中一个元素的时候有个逗号就是元组 # 空的小括号就是元组 # 元组有序: # 索引,切片,步长 # 元组不可变数据类型 元祖不可以增删改 可以 索引 切片 # 元组的嵌套: 为什么要有元祖? 保护数据安全 方法补充 tuple tu=(1,2,3) tuple: 计数 print(tu.count("3")) 利用元素找索引 index() print(tu.index("1"))
拆包
# 拆包 # a = 1 # b = 2 # a,b = b,a # print(a,b)
dict数据类型
# 字典是什么? # dict # {} "键":"值" 一个键对应一个值 # dic = {"key":"value",1:2,2:3} # 键:必须是可哈希(不可变的数据类型),并且是唯一的 # 值: 任意 # 字典的无序的,python3.6版本以上 默认了咱们定义顺序,python3.5以下是随机显示 # 字典比较消耗内存 最常用的数据 : 字符串,列表,字典 # 有明确的对应关系时,推荐使用字典 字典一定要用明白 -- json
dict增删改查
# dic = {"a":"b","b":"c"} # 增: # dic.setdefault("key","values")#存在就不添加,不存在就添加 # dic["s"] = "ssss" # dic[键] = 值 # 删: # print(dic.pop("a")) #通过键删除 pop具有返回值,返回的被删除的值 # del dic["b"] #删除指定的键值对 # del dic # 删除整个字典 # dic.clear() # 清空字典元素 # 改: # dic["b"] = "这是值" # 键在字典中存在就是修改,键在字典中不存在就是增加 # dic.update({6:6}) # update括号里的字典级别高有更新覆盖 无则添加 # 查: # 字典的查询只能通过键获取值,不能通过值获取键 # print(dic["c"]) 键不存在的时候不报错 # print(dic.get("c","不存在"))# 键存在返回值,键不存在设定第2参数的时候不报错 # dic = {1:2,"a":"a1"} # for i in dic: # for循环字典的时候打印的是字典的键 # print(i,dic[i]) # for k,v in dic.items(): # print(i) 补充方法 dict dict: dic = dict(k=1,k1=123,k2="aa",k3=222,k4=1123123) # 定义方式 批量创建字典 dic = {} dic1 = dict.fromkeys("abcdef",[4,5,6]) 第一个参数可迭代对象 第二个参数是每个键对应的值 -- 用的都是同一个内存地址 dic.popitem() #随机删除 python3.6版本 默认删除最后个键值对 python3.5版本以前 随机删除 批量创建字典 dic = {} dic1 = dict.fromkeys("abcdef",[4,5,6]) 第一个参数可迭代对象 第二个参数是每个键对应的值 -- 用的都是同一个内存地址
字典的嵌套
# 字典的嵌套:
枚举
# 枚举 默认从0开始 # enumerate() list = ['a','b', 3, 4, 5, 6] for i, j in enumerate(list): print(i+1,j)
set数据类型
# 集合就是一个没有值的字典,遵循:唯一,无序,元素要求可哈希(不可变) # 集合是无序的 # 集合是可变的 # 集合里面有元祖,只有当元组内的所有元素都为不可变类型的时候才可以做集合元素 # 创建set # s = set("1234") # 定义方式 s={1,2,3,"123",False,(1,2,3,4,)} print(s,type(s)) # 增: # s.update("3456") # 迭代添加 # s.add("怼怼") #删: # s.pop() #随机删除 # s.clear() # 清空 # del s #删除整个集合 # 改: # 删了,在加 # 查: # for # 天然去重 -- 唯一 列表去重 # print(s1 - s2) #差集 # print(s1 | s2) #并集 (合集) # print(s1 & s2) #交集 # print(s1 ^ s2) #对称差集 -- 反交集 # print(s1 > s2) # 超集 -- 父集 # print(s1 < s2) # 子集 # 冻结集合(可变 转换成 不可变) -- 更不常用 # f_s = frozenset({1,2,3,4,5}) # dic = {f_s:"1"} # print(dic)
深浅copy与小数据池(理论)
先理解is == id 用法
# is # 判断两个内存地址是否相同 # 必须记住 # == # 判断等号两边的值是否相同 # 必须记住 # = 代表赋值 改变指向
代码块
同一代码块
# 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块。 # 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。 # 适用对象: int(float),str,bool。
不同代码块(小数据池)
# 先执行代码块,不符合代码块才会执行小数据 # 代码块: 一个文件,一个模块,一个函数,一个类,终端中每一行都一个代码块 # 小数据池就是Python中一种提高效率的方式,固定数据类型使用同一个内存地址 # 小数据池 不同代码块的 # -5 ~ 256 *记住 # 字符串: # 1.字符串在做乘法的时候总长度不能超过20,进行驻留 # 记住 # 2.自己定义的字符串 长度不限制 字符串必须(字母,数字.下划线)组成,进行驻留 # 3.特殊字符(中文除外)定义1个时候,进行驻留 # 4.字符串*1 其实就是赋值 # bool值就是True,False # 怎么能自己驻留? #需要使用python的内置模块 # from sys import intern # a = intern("@@@@@@"*20) # b = intern("@@@@@@"*20) # print(a is b) # 自己进行驻留
小数据池的适用场景
深浅copy
# 浅copy: list dict: 嵌套的可变的数据类型是同一个。 浅拷贝:拷贝目标可变对象(list, dict, set)时,仅为 **整体** 第一层**可变对象分配新的内存地址**,**第二层(元素)**及以上的可变对象沿用之前对象的内存地址,此外**所有层的不可变对象**(int, str, bool, tuple)均沿用之前对象的内存地址。 # 深copy: list dict: 嵌套的可变的数据类型不是同一个 。 深拷贝:拷贝目标可变对象(list, dict, set)时,**为所有层的可变对象分配新的内存地址**,此外**所有层**的**不可变对象**(int, str, bool, tuple)均**沿用之前对象的内存地址。 深浅拷贝的规律: 赋值: 两个变量使用的是同一个空间 浅拷贝:修改不可变数据类型,不变动,修改可变数据类型,变动 深拷贝:修改就不变动 赋值运算 = 不是copy 只是改变指向 ID相同
python文件操作
文件操作是什么?
# 操作文件: # f = open("文件路径",mode="模式",encoding="编码") # open() # 调用操作系统打开文件 # mode # 对文件的操作方式 # encoding # 文件的编码 -- 存储编码要统一 # win -- gbk # linux -- utf-8 # mac -- utf-8 最常用的就是utf-8 # f 文件句柄 -- 操作文件的相当于锅把 # 文件操作怎么用? # 读 r # 写 w清空写 ,a追加写 # 读 rb # 写 wb ab
补充的知识点 编码的详细学习
# ascii 不支持中文 # gbk 国标 中文2 英文1 # unicode 万国码 英文2 中文4 # utf-8 英文1 欧洲2 亚洲3 # 硬盘中存储的是 字节 8位1字节 # 1. 在计算机内存中,统一使用Unicode编码,当需要将数据保存到硬盘或者需要网络传输的时候, # 就转换为非Unicode编码比如:UTF-8编码。 # 2. 不同编码之间,不能直接互相识别。 # 文件内容传输 先编码 在解码 用什么编码就用什么解码 # 编码 成bytes类型 # s = "abc" # print(s.encode("gbk")) # print(s1.decode("gbk")) #字节转换成字符串 -- 解码
文件操作的几种方式
注意:不管是读取文本内容还是非文本内容都是以下几种操作方式
读
- 全部读取
- 一行行读
写
- 清空写入
- 追加写入
操作光标
- 查看光标
- 移动光标
文件的+模式
- 边读边写
文件的修改
- 文件内容的替换
文件的读
# f.read() # 全部读取 # f.read(3) # 字符读取 # readline(3) # 读取一行内容中多个字符 # f.readlines()) # 一行一行读取,存储到列表中 \n是换行 with open('cs.txt',encoding='utf-8',mode='r') as f1: # print(f1.read())#全部读取 注意 一般不这么读 耗内存 print(f1.read(1))# 字符读取 注意不是读取字节 符号也是一个字符 # print(f1.readline())#读一行 注意会记录光标 \n是换行 # with open('cs.txt', encoding='utf-8', mode='r') as f1: # for i in f: # 迭代读取 一行一行读取 -- 防止内存溢出 # print(i) # 路径 # F:\a\111.txt 绝对路径 从磁盘的根处查找 # 相对路径 相对于当前文件进行查找的 # repr() #函数将对象转化为供解释器读取的形式。 dict = {'runoob': 'runoob.com', 'google': 'google.com'} print(repr(dict),type(repr(dict))) # import os # print(os.getcwd()) # 查看当前工作路径 # 另一种打开文件的方式. # with open("day8",mode="r",encoding="utf-8") as f,\ # open("a",mode="w",encoding="gbk") as f1: # print(f.read()) # f1.write("真饿!")
文件的写
# 写 w 清空写 a 追加写 # f = open("cs.txt",mode="w",encoding="utf-8") # f.write("123") # f.close() # 关闭文件 # a 追加写 追加到末尾 # with open('cs.txt',encoding='utf-8',mode='a') as f1: # # f1.write('你最棒')
文件读写非文本wb
# rb ,wb,ab 不能指定编码 # print(f.read()) # read() 全部读取 # with open('cs.jpg',mode='rb') as f1: # print(f1.read()) # print(f1.read(3)) # 读取的是字节 import requests import os ret = requests.get("http://www.521609.com/uploads/allimg/151124/1-1511241G251317.png") a=os.path.dirname(os.path.dirname(__file__)) b=os.path.join(a,'1.jpg') with open(b,mode='wb') as f1: f1.write(ret.content)
文件操作+模式
# r 读 r+ 读写 注意,要先读后写 如果写写在读 光标会在最后就读不出内容了 # w 写 w+ 写读 真的废物 # a 写 a+ 写读 # r+ #正确示范 -- 后期开发中使用频率比较低 # f = open("day8",mode="r+",encoding="utf-8") # print(f.read()) # f.write("脑瓜疼啊脑瓜疼")
调整文件光标
# 在a 模式 读完后关标在最后 所以我们要注意这些小问题 # 查看光标: tell() 返回值 返回的就是当前光标的位置 # 移动光标: # seek(0,0) 文件开始位置 # seek(0,1) 光标的当前位置 # seek(0,2) 文件末尾位置 # seek(3) 按照字节调节 使用utf-8是3 gbk是2
文件的修改
原理就是边读边写 # 不好用 好耗内存 # with open("day8",mode="r+",encoding="utf-8")as f: # content = f.read() # content = content.replace("您","你") # f.seek(0,0) # f.write(content) # 利用for循环 边读边写 与os模块 # with open("cs.txt",mode="r",encoding="utf-8")as f,\ # open("cs_bak.txt",mode="a",encoding="utf-8")as f1: # for i in f: # content = i.replace("你","我") # f1.write(content) # # import os # os.remove("cs.txt") # 原数据可以使用rename来做备份 # os.rename("cs_bak.txt","cs.txt") yuan=r'C:\Users\86131\Desktop\程序员之路笔记\系统测试学习\测试方法.md' gai=r'C:\Users\86131\Desktop\程序员之路笔记\系统测试学习\测试方法.md.bak' with open(yuan,mode="r",encoding="utf-8")as f,\ open(gai,mode="a",encoding="utf-8")as f1: for i in f: content = i.replace("回到顶部","") f1.write(content) import os os.remove(yuan) # 原数据可以使用rename来做备份 os.rename(gai,yuan)
来源:https://www.cnblogs.com/saoqiang/p/12111369.html