python笔记---day2
一、列表、元组操作
列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储,修改等操作。
列表的定义
nams=['刘德华','张学友','郭富城','黎明']
通过下标访问列表中的元素,下标是从0开始计数的
>>> names=['刘德华','张学友','郭富城','黎明'] >>> names[1] '张学友' >>> names[0] '刘德华' >>> names[-1] #还可以倒着取 '黎明' >>> names[-2] '郭富城' >>>
切片:取多个元素
>>> names=['刘德华','张学友','郭富城','黎明'] >>> names[1:3] #取下标1至3的元素,不包括3 ['张学友', '郭富城'] >>> names[1:-1] #取下标1至-1的元素,不包括-1 ['张学友', '郭富城'] >>> names[0:-1] ['刘德华', '张学友', '郭富城'] >>> names[2:] #取2到最后的元素,只能这样取 ['郭富城', '黎明'] >>> names[::2] # 后面的2是代表每隔一个元素就取一个(步长) ['刘德华', '郭富城'] >>> names[0::2] #跟上一句的效果一样 ['刘德华', '郭富城']
#利用步长倒去
>>> names
['金角大王', '黑姑娘', 'rain', '张勇', '狗蛋', '银角大王', 'eva', '鸡头']
>>>
>>> names[::-1]
['鸡头', 'eva', '银角大王', '狗蛋', '张勇', 'rain', '黑姑娘', '金角大王']
追加:
>>> names ['刘德华', '张学友', '郭富城', '黎明', '周星驰'] >>> names.append('成龙') >>> names ['刘德华', '张学友', '郭富城', '黎明', '周星驰', '成龙'] >>>
插入:
>>> names.insert(1,'zhourunfa') >>> names ['刘德华', 'zhourunfa', '张学友', '郭富城', '黎明', '周星驰', '成龙'] >>> names.insert(-1,'张家辉') >>> names ['刘德华', 'zhourunfa', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>>
修改:
>>> names ['刘德华', 'zhourunfa', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>> names[1]='周润发' >>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>>
扩展:
>>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙'] >>> job=['歌手','演员'] >>> names.extend(job) >>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>>
拷贝:
>>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>> names_copy=names.copy() >>> names_copy ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>>
统计:
统计元素的个数
>>> names ['刘德华', '周润发', '张学友', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>> names.insert(2,'歌手') >>> names.insert(4,'刘德华') >>> names ['刘德华', '周润发', '歌手', '张学友', '刘德华', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', '演员'] >>> names.count('歌手') 2 >>> names.count('刘德华') 2
统计元素的总个数:
>>> names ['黎明', '郭富城', '歌手', '歌手', '成龙', '张家辉', '周星驰', '刘德华', '刘德华', 'liudehua', 'Liudehua', '5'] >>> len(names) 12 >>>
排序:
>>> names ['刘德华', 5, '歌手', 'liudehua', '刘德华', '郭富城', '黎明', '周星驰', '张家辉', '成龙', '歌手', 'Liudehua'] >>> names.sort() Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> names.sort() TypeError: '<' not supported between instances of 'int' and 'str' #3.0以后不同数据类型不可以放在一起排序了 >>> names[1]='5' >>> names.sort() >>> names ['5', 'Liudehua', 'liudehua', '刘德华', '刘德华', '周星驰', '张家辉', '成龙', '歌手', '歌手', '郭富城', '黎明'] >>>
#反转
>>> names.reverse()
>>> names
['黎明', '郭富城', '歌手', '歌手', '成龙', '张家辉', '周星驰', '刘德华', '刘德华', 'liudehua', 'Liudehua', '5']
>>>
获取下标:
>>> names ['黎明', '郭富城', '歌手', '歌手', '成龙', '张家辉', '周星驰', '刘德华', '刘德华', 'liudehua', 'Liudehua', '5'] >>> names.index('歌手')#只能获取到第一个元素的下标 2 >>> names.index('刘德华') 7
元组:
元组的语法跟列表差不多,也是存一组数,只不过它一旦创建,就不能修改了;所以元组也叫只读列表。
语法:
>>> job=('teacher','student','police','cleaner') >>> len(job) 4 >>> job.index('cleaner') 3 >>> job.count('teacher') 1 >>>
它只有2个方法,一个是count,一个是index.
程序练习
请闭眼写出以下程序。
程序:购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
product_list=[('Iphone',9822),('Mac Book Air',13500),('Watch',6850),('bike',4900),('milk',15), ('book',89)] buy_list=[] temp=input('Please enter your salary: ') if temp.isdigit(): salary=int(temp) while True: print('----------商品 列表--------------') for index,product in enumerate(product_list): print(index,product) serial_num=input('lease enter the item number you want to buy>>>>>>>>>>>: ') if serial_num.isdigit(): serial_num = int(serial_num) #转换数字 p_item = product_list[serial_num] #要买的商品 if salary > p_item[1]: buy_list.append(p_item) #购买的商品加入购物车 salary = salary - int(p_item[1]) # 余额等于工资减去商品的价格 print('>>>>>>>:已经将商品:\033[1;31m%s\033[0m 加入购物车.' %p_item[0]) else: print('The balance is not enough to buy the goods') elif serial_num == 'q' or serial_num == 'Q': print('-------------Shoopping cart list----------------------') for searial in buy_list: print (searial) temp = int(temp) con_sum = temp - salary #计算消费金额 print('付款:\033[1;31m%s\033[0m ,消费金额:\033[1;31m%s\033[0m, 余额:\033[1;31m%s\033[0m' %(temp,con_sum,salary)) exit() else: print('Error Input')
二,内置函数:字符串的操作
>>> name='Liu De Hua' >>> name 'Liu De Hua' #大写全变小写 >>> name.casefold() 'liu de hua' #首写字母变大写 >>> name='liu de hua' >>> name.capitalize() 'Liu de hua' #返回一个指定的宽度,默认为空格 >>> name.center(50,'-') '--------------------liu de hua--------------------' >>> #统计字符,出现的次数 '--------------------liu de hua--------------------' >>> name.count('u') 2 #将字符串编码成bytes格式 >>> name.encode() b'liu de hua' #判断字符是否以"ua"结尾 >>> name.endswith('ua') True #将\t 转换成多长的空格 >> "Liu\tDe\tHua".expandtabs(10) 'Liu De Hua' #查找字符串出现的次数 >>> name.find('u') 2
format:
格式化函数,
#方法一: >>> msg = "my name is {},and age is {}" >>> msg.format("zhang yong",18) 'my name is zhang yong,and age is 18' #方法二: >>> msg = "my name is {0},age is {1},come from{2}" >>> msg.format('zhangyong',18,'China') 'my name is zhangyong,age is 18,come fromChina' #方法三: >>> msg= "my name is {name},and age is {age}" >>> msg.format(name='Zhang Yong',age=18) 'my name is Zhang Yong,and age is 18'
format_map
>>> msg.format_map({'name':'zhang yong','age':18}) 'my name is zhang yong,and age is 18'
# 查找索引,返回索引值,找不到返回-1
index()语法:
str.index(str,beg=0,end=len(string))
- str -- 指定检索的字符串
- beg -- 开始索引,默认为0
- end -- 结束索引,默认为字符串的长度。
>>> msg.index("my") 0
>>> names="zhang yong"
查找g的索引
>>> names.index('g')
4
查找第二个“g”的索引
>>> names.index('g',names.index('g')+1)
9
>>>
#检测字符串是否由字母和数字组成,是就返回true >>> "asdf2134".isalnum() True >>> #判断是否整数 >>> '21'.isdigit() True
#判断字符是否只有数字组成 >>> '3452323'.isnumeric() True
#istitle() 判断是否是标题格式,这里理解为首字母大写 >>> 'Wlcome to china'.istitle() False >>> 'Wlcome To China'.istitle() True
#isupper() 判断字符串是否全部是大写 >>> "ZHANGYONG".isupper() True
三,字典操作
字典是一种 key -value 的数据类型,使用就像我们上学的时候用的字典,通过笔画,字母来查对应的详细页面。
语法:
info = { 'stu1101': "刘德华",'stu1102': "张学友", 'stu1103': "郭富城", 'stu1104' : "黎明", 'stu1105':"张国荣"}
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重。
增加:
>>> info {'stu1101': '刘德华', 'stu1102': '张学友', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣'} >>> info['stu1106'] = '陈奕迅' >>> info {'stu1101': '刘德华', 'stu1102': '张学友', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'}
修改:
>>> info {'stu1101': '刘德华', 'stu1102': '张学友', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> info['stu1102']='周杰伦' >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>>
删除:
>>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1103': '郭富城', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> info.pop('stu1103') #标准删除 '郭富城' >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> del info['stu1104'] #跟列表一样的删除 del通用 >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} >>> info.popitem() #随机删除,工作中没什么用 ('stu1106', '陈奕迅') >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1105': '张国荣'} >>> info.popitem() ('stu1105', '张国荣') >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦'} >>>
多级字典嵌套与操作:
字典:
guangdong={ "广州市":{"越秀区":{},"白云区":{"同和街道","嘉禾街道"}}, "珠海市":{ "斗门区":{},"香洲区":{"吉大街道"} } }
查询:
>>> guangdong["广州市"] {'越秀区': {}, '白云区': {'同和街道', '嘉禾街道'}} >>> guangdong['广州市']['白云区'] {'同和街道', '嘉禾街道'} >>>
修改:
>>> guangdong['广州市']['越秀区']={'东山街道','农林街道','大东街道','大塘街道'} >>> guangdong['广州市']['越秀区'] {'大东街道', '东山街道', '农林街道', '大塘街道'}
增加:
>>> guangdong {'广州市': {'越秀区': {'大东街道', '东山街道', '农林街道', '大塘街道'}, '白云区': {'同和街道', '嘉禾街道'}}, '珠海市': {'斗门区': {}, '香洲区': {'吉大街道'}}} >>> guangdong['珠海市']['斗门区']={'井岸镇','白蕉镇','乾务镇'} >>> guangdong['珠海市'] {'斗门区': {'乾务镇', '白蕉镇', '井岸镇'}, '香洲区': {'吉大街道'}} >>>
删除:
>> guangdong['珠海市'] {'斗门区': {'乾务镇', '白蕉镇', '井岸镇'}, '香洲区': {'吉大街道'}} >>> del guangdong['珠海市']['香洲区'] >>> guangdong['珠海市'] {'斗门区': {'乾务镇', '白蕉镇', '井岸镇'}} >>>
其他操作
>>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅'} #显示字典的value值 >>> info.values() dict_values(['刘德华', '周杰伦', '黎明', '张国荣', '陈奕迅']) 显示KEY值 >>> info.keys() #Python 字典 setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。 dict_keys(['stu1101', 'stu1102', 'stu1104', 'stu1105', 'stu1106']) >>> info.setdefault("stu1107",'周华健') '周华健' >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅', 'stu1107': '周华健'} >>> b={1:2,2:33,3:456456} #合并 >>> info.update(b) >>> info {'stu1101': '刘德华', 'stu1102': '周杰伦', 'stu1104': '黎明', 'stu1105': '张国荣', 'stu1106': '陈奕迅', 'stu1107': '周华健', 1: 2, 2: 33, 3: 456456} >>>
循环
#方法1 for key in info: print(key,info[key]) #方法2 for k,v in info.items(): #会先把dict转成list,数据里大时莫用 print(k,v)
程序练习
程序: 三级菜单
要求:
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
1 state={ 2 "广东省":{ 3 "广州市":{ 4 "越秀区": { 5 "北京街道": {}, 6 "虹桥街道": {}, 7 "流花街道": {}, 8 "东山街道": {}, 9 }, 10 "荔湾区": { 11 "岭南街道": {}, 12 "沙面街道": {}, 13 "东沙街道": {}, 14 "花地街道": {}, 15 }, 16 "海珠区": { 17 "琶洲街道": {}, 18 "南洲街道": {}, 19 "凤阳街道": {}, 20 "江海街道": {}, 21 }, 22 "白云区": { 23 "同和街道": {}, 24 "嘉禾街道": {}, 25 "石井街道": {}, 26 "均和街道": {}, 27 }, 28 }, 29 "深圳市": {}, 30 "珠海市": {}, 31 "汕头市": {}, 32 "东莞市": {}, 33 }, 34 "湖南省":{ 35 "长沙市": {}, 36 "株洲市": {}, 37 "湘潭市": {}, 38 "衡阳市": {}, 39 }, 40 41 "江西省":{ 42 "南昌市": {}, 43 "九江市": {}, 44 "宜春市": {}, 45 "赣州市": {}, 46 }, 47 48 } 49 50 #print(state["广东省"]) 51 52 exit_flag = False 53 54 while not exit_flag : 55 for key in state: 56 print(key) 57 choice = input("输入你的选择>>>>>>>>>>: ") 58 if choice == 'q' or choice == 'Q': 59 exit_flag = True 60 if choice in state: 61 while not exit_flag: 62 for key2 in state[choice]: 63 print("\t", key2) 64 choice1 = input("输入你的选择(可按q退出)>>>>>>>>>>: ") 65 if choice1 == 'q' or choice1 == 'Q': 66 exit_flag = True 67 if choice1 in state[choice]: 68 while not exit_flag: 69 for key3 in state[choice][choice1]: 70 print("\t \t", key3) 71 choice2 = input("输入你的选择(可按b返回或q退出)>>>>>>>>>>: ") 72 if choice2 == 'q' or choice2 == 'Q': 73 exit_flag = True 74 if choice2 in state[choice][choice1]: 75 while not exit_flag: 76 for key4 in state[choice][choice1][choice2]: 77 print("\t \t \t", key4) 78 choice3=input("最后一层了,按b返回!或者按 q 退出 >>>>: ") 79 if choice3 == 'q' or choice3 == 'Q': 80 exit_flag = True 81 if choice3 == 'b': 82 break 83 lse: 84 print("输入错误~,请重新选择") 85 if choice2 == 'b': 86 break 87 else: 88 print("输入错误~,请重新选择") 89 if choice1 == 'b': 90 break 91 else: 92 print("输入错误~,请重新选择") 93 else: 94 print("输入错误~,请重新选择")
四、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作:
#创建一个数值集合 >>> t=set([1,3,6,2,7,3,1,6,9,65]) >>> t {1, 2, 3, 65, 6, 7, 9} #创建一个唯一字符的集合 >>> s =set("Hello") >>> s {'o', 'e', 'H', 'l'} ########## >>> s=set([2,4,8,4,5,8,2]) >>> s {8, 2, 4, 5} >>> t=set([5,8,4,9,10,2]) >>> t {2, 4, 5, 8, 9, 10} #t和s的并集 >>> print(t|s) {2, 4, 5, 8, 9, 10} #t和s的交集 >>> print(t&s) {8, 2, 4, 5} #s的差集合(项在t中,但不在s中) >>> print(t-s) {9, 10} 对称差集(项在t或s中,但不会同时出现在二者中) >>> print(t^s) {9, 10}
基本操作
#添加一项 >>> s.add(15) >>> s {2, 4, 5, 8, 15} #添加多项 >>> t.update([0,4,67,33]) >>> t {0, 33, 2, 67, 4, 5, 8, 9, 10} #删除一项 >>> t.remove(33) >>> t {0, 2, 67, 4, 5, 8, 9, 10} >>> #t的set 长度 >>> len(t) 8 #判断1,2 是否在t里面 >>> 1 in t False >>> 2 in t True >>> 4 and 5 in t True #判断20是否不在t里面 >>> 20 not in t True #判断s所有的元素是否都在t里面。 2种方法 >>> s.issubset(t) False >>> s >= t False s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t) s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy() 返回 set “s”的一个浅复制
五、文件的操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现有文件如下:
Somehow, it seems the love I knew was always the most destructive kind 不知为何,我经历的爱情总是最具毁灭性的的那种 Yesterday when I was young 昨日当我年少轻狂 The taste of life was sweet 生命的滋味是甜的 As rain upon my tongue 就如舌尖上的雨露 I teased at life as if it were a foolish game 我戏弄生命 视其为愚蠢的游戏 The way the evening breeze 就如夜晚的微风 May tease the candle flame 逗弄蜡烛的火苗 The thousand dreams I dreamed 我曾千万次梦见 The splendid things I planned 那些我计划的绚丽蓝图 I always built to last on weak and shifting sand 但我总是将之建筑在易逝的流沙上 I lived by night and shunned the naked light of day 我夜夜笙歌 逃避白昼赤裸的阳光 And only now I see how the time ran away 事到如今我才看清岁月是如何匆匆流逝 Yesterday when I was young 昨日当我年少轻狂 So many lovely songs were waiting to be sung 有那么多甜美的曲儿等我歌唱 So many wild pleasures lay in store for me 有那么多肆意的快乐等我享受 And so much pain my eyes refused to see 还有那么多痛苦 我的双眼却视而不见 I ran so fast that time and youth at last ran out 我飞快地奔走 最终时光与青春消逝殆尽 I never stopped to think what life was all about 我从未停下脚步去思考生命的意义 And every conversation that I can now recall 如今回想起的所有对话 Concerned itself with me and nothing else at all 除了和我相关的 什么都记不得了 The game of love I played with arrogance and pride 我用自负和傲慢玩着爱情的游戏 And every flame I lit too quickly, quickly died 所有我点燃的火焰都熄灭得太快 The friends I made all somehow seemed to slip away 所有我交的朋友似乎都不知不觉地离开了 And only now I'm left alone to end the play, yeah 只剩我一个人在台上来结束这场闹剧 Oh, yesterday when I was young 噢 昨日当我年少轻狂 So many, many songs were waiting to be sung 有那么那么多甜美的曲儿等我歌唱 So many wild pleasures lay in store for me 有那么多肆意的快乐等我享受 And so much pain my eyes refused to see 还有那么多痛苦 我的双眼却视而不见 There are so many songs in me that won't be sung 我有太多歌曲永远不会被唱起 I feel the bitter taste of tears upon my tongue 我尝到了舌尖泪水的苦涩滋味 The time has come for me to pay for yesterday 终于到了付出代价的时间 为了昨日 When I was young 当我年少轻狂
基本操作
f = open('yesterday'',encoding='utf8') #打开文件 first_line = f.readline() print('first line:',first_line) #读一行 print('我是分隔线'.center(50,'-')) data = f.read()# 读取剩下的所有内容,文件大时不要用 print(data) #打印文件 f.close() #关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
操作
文件追加:
f=open('yesterday','a+' ,encoding='utf8') f.write("\n我爱北京天安门")
读取前面五行
f=open('yesterday','r' ,encoding='utf8') for i in range(5): print(f.readline().strip()) f.close()
strip()去除空行
打印6-10行
f=open('yesterday','r' ,encoding='utf8') for i in range(10): data = f.readline() if i <= 4: continue else: print(data.strip()) f.close()
第10行,不打印
f=open('yesterday','r' ,encoding='utf8') for index,line in enumerate(f.readlines()): if index == 9: continue print(line.strip()) f.close()
备注:read是预先把内容读取到内存里面,不能做到读取一行,打印一行。如果文件很大的时候会占用很大内存,而且效率也不高。
所以上面的写法太low了,不可取。以后只使用以下高bige的方法:
#高逼格写法:不占用内存。 文件f: 变成了一个迭代器东西。
f=open('yesterday','r' ,encoding='utf8') count = 0 for line in f: count = count +1 if count == 10: continue print (line.strip()) f.close()
文件内容的替换
python的文件内容替换,只能是读取原来的文件,修改完成后写到新文件里面去。
#file.txt 不知道何时鬓角已染霜 不知道何时颜容已沧桑 忽然怀念从前那些逞强 和懵懂无知的年少轻狂 一瞬间发现人生太短暂 一瞬间发现路不再漫长 还没腾出双手拥抱自己 时光竟已走得这么匆忙 怎么刚刚懂事就失去了 #脚本 f = open('file.txt','r',encoding='UTF-8') f_new = open('file_new.txt','w',encoding='UTF-8') for line in f: if "怎么刚刚学会懂事就老了" in line: line = line.replace("怎么刚刚学会懂事就老了","怎么刚刚懂事就失去了") f_new.write(line) f.close()
f_new.close() #会在前目录新建一个fie_new.txt 文件 看下内容: 不知道何时鬓角已染霜 不知道何时颜容已沧桑 忽然怀念从前那些逞强 和懵懂无知的年少轻狂 一瞬间发现人生太短暂 一瞬间发现路不再漫长 还没腾出双手拥抱自己 时光竟已走得这么匆忙 怎么刚刚懂事就失去了
with 语句
为了避免打开文件后忘记关闭,可以通过管理上下文:
语法:
with open('file','r') as f: ....
用这种方式,当with代码块执行完毕后,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
语法:
with open('file','r') as f,open('file2','r') as f2: ....
上面替换文字用with的写法 格式如下:
with open('file.txt','r',encoding='UTF-8') as f,\ open('file_new.txt','w',encoding='UTF-8') as f_new: for line in f: if "怎么刚刚学会懂事就老了" in line: line = line.replace("怎么刚刚学会懂事就老了","怎么刚刚懂事就失去了") f_new.write(line)