第二章:Python数据类型+文件处理
第二章:Python数据类型介绍+字符编码+文件处理
Python数据类型介绍
数据类型(1数字、2字符串、3列表、4字典、5、元组):
1、(int)数字(整形,长整形(Py2),浮点型,复数)
•int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数。
•long(长整数):或渴望,无限大小的整数,这样写整数和一个大写或小写的L。
•float(浮点实际值):彩车,代表实数,小数除以整数部分和小数部分的书面。花车也可能是在科学记数法与E或指示的10次方é(2.5e2= 2.5×102=250)。
•complex (复数):+ BJ的形式,其中a,b是彩车和J(或J)表示-1的平方根(这是一个虚数)。 a是真正的数字部分,b是虚部。复数不使用Python编程
>>> a, b, c, d = 20, 5.5, True, 4+3j >>> print(type(a), type(b), type(c), type(d)) <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
2、(str)字符串
Python字符串即可以用单引号也可以用双引号括起来,甚至还可以用三引号括起来
字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
# # 数字,进制之间的转化 # age=10 # print(bin(age)) #10-->2 # print(oct(age)) #10-->8 # print(hex(age)) #10-->16 # 0b1010 # 0o12 # 0xa #索引 # name='sheng' #name=str(anme) # print(name[0]) # print(name[100]) #string index out of range # 移除空白 # name=input('name: ') # name=name.strip() #移除字符串两边的空格 # print(name) # name=input('username:').strip() # name = '***shen***' # print(name.lstrip('*')) # print(name.rstrip('&')) # shen*** # ***shen*** #切分 # user_info='root:x:0:0:root:/root:/bin/bash' # print(user_info.split(':')) # print(user_info.split(':',1)[0]) # #取出长度 # name='sheng' # print(len(name)) # print(name.__len__()) #切出子字符串 # name='hellp world' # print(name[1]) # print(name[1:]) # print(name[1:-1]) # print(name[1:9:2]) #字符串其他的方法(掌握) # name='shengleqi' # print(name.startswith('sh')) #判断是否十一'sh'开头 # print(name.endswith('qi')) #判断是否十一'qi'结尾 # name='shen leqi hollo world' # print(name.replace('shen','SHENG')) ##format # print('{} {} {}'.format('sheng',38,'man')) # print('{1} {0} {1}'.format('sheng',38,'man')) # print('NAME:{name}AGE:{age}SEX:{sex}'.format(name='sheng',age=39,sex='man')) #判断输入的是数组并且不为空 # sheng=123 # while True: # age=input('>>').strip() # if len(age) == 0:continue # if age.isdigit(): # age=int(age) # print(age,type(age)) #字符串其他需要了解的方法: # name='sheng leqi hello' # print(name.find('e')) #找到索引并且返回索引值(找到的第一个),没找到返回-1 # print(name.find('e',3,9)) #从索引第3个开始找到第9个 # print(name.count('l')) #查找'l'的格式并且返回, # print(name.count('l',1,7)) #在索引1到第7个之间查找'l', # print(name.index('l')) #返回第一个'l'的索引值 # print(name.index('e')) #返回第一个'e'的索引值 # a=['sheng','say','hello','world','123'] #类型内容都是字符串 # print('&'.join(a)) # name='lele' # print(name.center(20,'*')) #输出占20个空格不够用’*‘补充 # print(name.ljust(20,'*')) #输出占20个,以左对齐,右边不够用'*补充' # print(name.rjust(20,"$")) #输出占20个,以右边对齐,右边不够用'$补充' # # name='sheng\thello' # print(name) # print(name.expandtabs(2)) #expandtabs作用使'\t'空格数变成2个空格 # name='ShengLeQi' # print(name.lower()) #吧字符串每个字符变小写 # print(name.upper())#吧字符串每个字符变大写 num1=b'4' #Bytes num2=u'4' #unicode,python3中无需加u就是unicode num3='四' #中文数字 num4='Ⅳ' #罗马数字 # bytes,unicode # print(num1.isdigit()) #最常使用是的isdigit # print(num2.isdigit()) # print(num3.isdigit()) # print(num4.isdigit()) # print(num2.isdecimal()) # print(num3.isdecimal()) # print(num4.isdecimal()) #isnumberic:unicode,汉字,罗马 # print(num2.isnumeric()) # print(num3.isnumeric()) # print(num4.isnumeric()) 补充: # masg3='fadsaf' # print(masg3.isalnum()) #判断符串是否是字母和数字组成 # print(masg3.isalpha()) #判断符串是否只是字母 # msg4=10 # print(msg4.isdecimal()) #判断字符串是否只包含十进制字符 # msg6='12.7' # print(msg6.isdigit()) #判断字符串是整数 # msg7='2042424' # print(msg7.isnumeric()) #判断字符串是整形数字 # print(msg10.isspace()) #判断字符串中是否空格 # print(msg11.istitle()) #判断一个单词只有首字母是大写,有空格就是2个单词 # print(msg12.isupper()) #判断字符串是否是大写 # # print(msg13.ljust(10,'*')) #一共有10个字符长度msg13在左面,右边用'*'补全 # # print(msg13.rjust(10,'*')) #一共有10个字符长度msg13在右面,左边用'*'补全 # # print(msg13.center(10,'*')) #一共有10个字符长度msg13在中间,左右边用'*'补全 # print(msg15.strip()) #去掉首尾的空格 # print(msg15.lstrip()) #去掉左边的空格 # print(msg15.rstrip()) #去掉右边的空格 # msg17='abc' # print(msg17.zfill(10)) #右对齐,不够用'0'填充 # print(msg17.rjust(10,'*')) # print(msg17.ljust(10,'*')) # print(msg17.center(10,'&'))
3、(list)列表
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号([])之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
# my_girl_friends=['lele','qiqi','sheng',4,10,30] # print(type(my_girl_friends)) # print(my_girl_friends[3]) #去读索引为3的值 # print(my_girl_friends[1:3]) #取出列表中索引为1到3的元素 # print(my_girl_friends[1:6:2]) # my_girl_friends.append('AAA') #append增加列表元素 # print(my_girl_friends) #默认pop按照列表的最后一个元素删除 # my_girl_friends.pop() # print(my_girl_friends) # my_girl_friends.pop() # print(my_girl_friends) # print(my_girl_friends.pop(1)) #删除索引为“1”的元素并且返回该元素。 # my_girl_friends.pop(0) # my_girl_friends.pop(1) # print(my_girl_friends) # my_girl_friends=['lele','qiqi','sheng',4,10,30] # my_girl_friends.remove('qiqi') #remove按照元素的值俩移除,删除元素值为“qiqi”的元素 # print(my_girl_friends) # print(my_girl_friends.__len__()) #取列表长度 # print(len(my_girl_friends)) # print('ABC:',my_girl_friends) #打印 # 其他造作,需要 掌握 # my_girl_friends=['lele','qiqi','sheng',4,10,30] # my_girl_friends.insert(1,'SSBB') #insert 插入列表操作可以指定位置 # my_girl_friends.insert(0,'AAAA') # print(my_girl_friends) #其他操作,需要了解 my_girl_friends=['lele','qiqi','sheng',4,10,30,'qiqi','lele','AAA'] # my_girl_friends.clear() #清除列表 # print(my_girl_friends) # a=my_girl_friends.copy() #f复制一个列表操作 # print(a) # print(my_girl_friends.count('lele')) #统计“lele”数量 # my_girl_friends.append('oldboy1') # my_girl_friends.append('oldboy2') # my_girl_friends.append('oldboy3') # print(my_girl_friends) # my_girl_friends.extend(['oldboy1','oldboy2','oldboy3']) #批量插入 # print(my_girl_friends) # print(my_girl_friends.index('qiqi')) #返回列表元素'qiqi'的索引 # my_girl_friends.reverse() #列表翻转 # print(my_girl_friends) # l=[1,-2,34,23] # # l.sort() #从小到大排序 # # print(l) # l.sort(reverse=True) # print(l) #从大到下排序 #练习 #1、把列表赋值给变量 # data=['sheng',28,[1990,3,8]] # print(data[0]) # print(data[1]) # print(data[2][0]) # name,age,birth=data # print(name) # print(age) # print(birth) #把字符串的字符分别赋值给变量 # msg='hello' # a,b,c,d,e=msg # print(a,b,c,d,e) #赋值第一个和最后一个字符 # msg='hello' # # a,_,_,_,b=msg ##等同于a,*_,b=msg # a,*_,b=msg # print(a) # print(b) ####练习:队列 先进先出 # fifo=[] #入队 # fifo.append('first') # fifo.append('second') # fifo.append('third') # print(fifo) #出队 # print(fifo.pop(0)) # print(fifo.pop(0)) # print(fifo.pop(0)) #入队 # fifo.insert(0,'first') # fifo.insert(0,'second') # fifo.insert(0,'third') # print(fifo) # #出队 # print(fifo.pop()) # print(fifo.pop()) # print(fifo.pop()) ####练习:堆栈 先进后出 # lifo=[] # lifo.append('first') # lifo.append('second') # lifo.append('third') # print(lifo) # print(lifo.pop()) # print(lifo.pop()) # print(lifo.pop())
4、(dict)字典
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。
键(key)必须使用不可变类型。
在同一个字典中,键(key)必须是唯一的。
# info={'name':'sheng','age':28,'sex':'man'} # 本质是info=dict({'name':'sheng','age':28,'sex':'man'}) # print(info['age']) # info['heighe']=1.78 # print(info) # for ke in info: #循环取出字典元素 # print(ke) #字典是无序的 # 字典:字典的key值必须是不可变类型,也是可hash类型 # info={(1,2):'a'} # print(info[(1,2)]) #字典常用的方法(必须掌握) # info={'name':'sheng','age':28,'sex':'man'} # print(info.pop('sex')) # print(info) # print(info.pop('shengl')) # print(info.pop('shengl',None)) #当需要pop的值没有的时候返回None(自己设置) # print(info.pop('shengl','not key')) #字典其他常用的方法 info={'name':'sheng','age':28,'sex':'man'} # print(info.popitem()) #随机pop出一个'key:value' # print(info.popitem()) # print(info) # print(info.keys(),type(info.keys())) #直接取出key # print(info.values(),type(info.values())) #直接取出key # for i in info.keys(): #循环取key值 # print(i) # for i in info.values(): #循环取出values # print(i) # for i in info.items(): #循环取'key:values'的值 # print(i) # for i,key in info.items(): #i=key,j=value # print(i,key) # msg_dic={ # 'apple':10, # 'tesla':100000, # 'mac':3000, # 'lenovo':30000, # 'chicken':10, # } # for i,j in msg_dic.items(): #循环取出key,values # print(i,j) info={'name':'sheng','age':28,'sex':'man'} # print(info.clear()) #clear清空字典 #快速定义(创建)字典 # print(info.items()) # dis=info.fromkeys(['sheng','le','qi','sql'],123) #创建的字典是{'sheng': 123, 'le': 123, 'qi': 123, 'sql': 123} # print(dis) # dis=info.fromkeys(['sheng','le','qi'],None) #创建的字典:{'sheng': None, 'le': None, 'qi': None} # print(dis) # dic=dict(a=1,b=2,c=3) #创建字典{'a': 1, 'b': 2, 'c': 3} # print(dic) # print(info) # #更新字典 # dic={'a':1,'b':2,'name':'SQL'} #得到{'name': 'SQL', 'age': 28, 'sex': 'man', 'a': 1, 'b': 2} # info.update(dic) # print(info) # d=dict.setdefault(['a','b','c'],[]) # print(d) #setdefault 如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。 # dict = {'runoob': '菜鸟教程', 'google': 'Google 搜索'} # print("Value : %s" % dict.setdefault('runoob', None)) # print("Value : %s" % dict.setdefault('Taobao', '淘宝')) # # d={} # print(d) # d['name']='sheng' # d['age']='24' # d['sex']='man' # d['hobby']=[] # d['hobby'].append('play basketball') # d['hobby'].append('play football') # print(d) # d.setdefault('habby',[].append('paly1')) #d['hobby'] # d.setdefault('habby',[].append('paly2')) #d['hobby'] # d.setdefault('habby',[].append('paly3')) #d['hobby'] # print(d) #字典练习:把大于66的放入k1,小于66的放入k2 #显然k1对应大于66;k2对应小于66,满足这样的数据结构(字典+列表)比较合适 #因为字 # nums=[11, 22, 33, 44, 55, 66, 77, 88, 99, 90] # dis={ # 'k1':[], # 'k2':[], # } # for i in nums: # if i > 66: # dis['k1'].append(i) # else: # dis['k2'].append(i) # print(dis)
5、(tuple)元组
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。
元组中的元素类型也可以不相同:
# age=(11,22,33,44,55,33)# 本质age=tuple((11,22,33,44,55)) # print(age[2]) # print(age[1:4]) # print(len(age)) # print(21 in age) # print(age.index(33)) # print(age.count(33)) # # 33 # (22, 33, 44) # 6 # False # 2 # 2 #元祖练习:现在把商品展示在屏幕,让用户输入商品名称,循环输入 #你输出,东西,价格,数量 # apple 10 # apple 10 # mac 3000 # mac 3000 # --------------------- # msg_dic={ # 'apple':10, # 'tesla':100000, # 'mac':3000, # 'lenovo':30000, # 'chicken':10, # } # shop=[] # while True: # for key,value in msg_dic.items(): # print('名称:',key,'价格:',value) # key_user=input('请输入商品:>>').strip() # if key_user not in msg_dic or len(key_user) == 0:continue # count=input('请输入数量:>>').strip() # if count.isdigit(): # shop.append((key_user,msg_dic[key_user],int(count))) # print(shop) shop_list={ 'apple':10, 'tesla':100000, 'mac':3000, 'lenovo':30000, 'chicken':10, } good_l=[] while True: for key,value in shop_list.items(): print(key,value) shop=input('请输入商品>>').strip() if shop not in shop_list or len(shop)==0:continue count=input('请输入数量>>').strip() if count.isdigit(): count=int(count) good_l.append((shop,shop_list[shop],count)) print(good_l)
6、(set)集合
集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
# 集合 # 作用:去重,关系运算, # 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key # 集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 # # # 常用方法: # in 和 not in # | 合集 # & 交集 # -差集 # ^ 对称差集 # == # > , >= , <, <= 父集,子集 # 集合(sets)有两种不同的类型:可变集合(set)和不可变集合(frozenset),在这里指不可变集合 # 集合特点 # pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu'] # linuxs=['wupeiqi','oldboy','gangdan'] # print(type(pythons),linuxs) #查出在pythons同时又在linux里面的 # res=[] # for i in pythons: # if i in linuxs: # res.append(i) # print(res) #集合特点 #1 集合内可以有多个元素,但是每个元素都必须是不可变类型,即可hash类型 #2 集合内的元素唯一 #3 集合是无序的 # s={1,'a',1,1,1,1,1,1} #s=set({1,'a',1,1,1,1,1,1}) # # # s1=set('hello') #使字符串变成集合 # print(s1,type(s1)) # s={'a',3,9,'b'} # print(s,type(s)) #集合中重要的方法: # pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu'] # # print('sheng' not in pythons) # # print('egon' not in pythons) # # #关系运算 # s1={1,22,33,54,23} # s2={1,2,33,4} # #交集 # print(s1 & s2) # #并集 # print(s1 | s2) # #差集 # print(s1 - s2) # #对称差集 # print(s1 ^ s2) # # #父集 # s1={1,2,3,4,5} # s2={1,5} # print(s1 >= s2) # # #子集 # print(s1 <= s2) # print(s2 <= s1) #集合练习一 # pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} # linuxs={'wupeiqi','oldboy','gangdan'} # # # # 1. 求出即报名python又报名linux课程的学员名字集合 # print(pythons & linuxs) # # 2. 求出所有报名的学生名字集合 # print(pythons | linuxs) # # 3. 求出只报名python课程的学员名字 # print(pythons - linuxs) # # 4. 求出没有同时这两门课程的学员名字集合 # print(pythons ^ linuxs) ##集合练习二: # 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序 # l=[1,'d','a','b',1,'a','a'] # s=set(l) # print(s) # print(list(s)) # 2.在上题的基础上,保存列表原来的顺序 # l1=[] # for i in l: # if i not in l1: # l1.append(i) # print(l1) # l=[1,'d','a','b',1,'a','a'] # l1=[] # s=set() # for item in l: # if item not in s: # s.add(item) #{'a','b',1} # # l1.append(item) # l1.append(item) # # print(l1) # 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序 l=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ] # l1=[] # for i in l: # if i not in l1: # l1.append(i) # print(l1) # l1=[] # s=set() # for i in l: # val=(i['name'],i['age'],i['sex']) # if val not in s: # s.add(val) # l1.append(i) # print(s) #集合的内置方法 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} linuxs={'wupeiqi','oldboy','gangdan'} # 1. 求出即报名python又报名linux课程的学员名字集合 # print(pythons & linuxs) # print(pythons.intersection(linuxs)) # 2. 求出所有报名的学生名字集合 # print(pythons | linuxs) # print(pythons.union(linuxs)) # 3. 求出只报名python课程的学员名字 # print(pythons - linuxs) # print(pythons.difference(linuxs)) # 4. 求出没有同时这两门课程的学员名字集合 # print(pythons ^ linuxs) # print(pythons.symmetric_difference(linuxs)) s={1,2,3,'a'} # s.add(4) # print(s) # # print(s.pop()) # s.remove('a') # print(s) # s.remove('vvvvvvvvvv') s.discard('aaaaaa') print(s)
总结:
(str)字符串 => 常用操作:
msg='shengf' 移除空白:msg.strip() 切分: print(msg.split()) #默认以空格为切分 长度:print(len(msg)) #返回元素个数 索引:print(msg.index('f')) #返回'f'的索引号 切片: print(msg[1:2]) #msg从索引为'1'开始打印到第2个(顾前不顾尾)
(list)列表 => 常用操作:
msg=['sheng','le','qi','zeze'] 索引: print(msg.index('le')) 切片: print(msg[1:]) 追加: msg.append('hehe') msg.insert(1,'qunimei') 删除: msg.pop() #默认删除最后一个元素 msg.remove('le') 长度: print(len(msg)) 循环: for i in msg: print(i) 包含in: print('le' in msg) 计数:print(msg.count('lele')) 列表合并: l1=[1,2] msg.extend(l1) print(msg) 列表排序:msg.sort() msg.reverse()
(dict)字典 => 常用操作:
msg={'name':'ShengLQ','age':27,'sex':'man','habby':['play','reading']}
存/取: msg['height']=180 / print(msg['name'])
删除: del msg['sex']
键s,值s,键值对: ???
长度: print(len(msg))
循环: for i,j in enumerate(msg):
print(i,j) #取key
print(i,msg[j]) #取value
包含in: print('name' in msg) #包含key
定义:msg1=msg1.fromkeys([1,2,3],'sheng')
(tuple)元组 => 常用操作:
msg=('sheng',11,22,33,44,55,77,88) 索引: print(msg.index(11)) 切片: print(msg[1:]) 循环: for i in msg: print(i) 长度: print(len(msg)) 包含in: print('sheng' in msg)
(set)集合 => 常用操作:
s1={1,'a',1,2,3,4,5}
s2={1,2,3}
in 和 not in: print('a' in s1)
|合集: print(s1 | s2)
&交集: print(s1 & s2)
-差集: print(s1 - s2)
^对称差集: print(s1 ^ s2)
==: print(s1 == s2)
>,>= ,<,<= 父集,子集: print(s1 >= s2)
Python 文件操作:
编程语言对文件系统的操作是一项必不可少的功能,各种编程语言基本上都有对文件系统的操作,最简洁的莫过于linux里面shell的操作了,其次,则是python,ruby等动态语言的操作,那么,今天先来看下,在python里面如何使用一些常用的操作文件功能
r 只能读 r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容 w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建 w 只能写,覆盖整个文件,不存在则创建 a 只能写,从文件底部添加内容 不存在则创建 a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
|
方法 |
描述 |
|
关闭文件。关闭后文件不能再进行读写操作。 |
|
|
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
|
|
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
|
|
如果文件连接到一个终端设备返回 True,否则返回 False。 |
|
|
返回文件下一行。 |
|
|
从文件读取指定的字节数,如果未给定或为负则读取所有。 |
|
|
读取整行,包括 "\n" 字符。 |
|
|
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
|
|
设置文件当前位置 |
|
|
返回文件当前位置。 |
|
|
从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。 |
|
|
将字符串写入文件,没有返回值。 |
|
|
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
文件常用操作:
# f=open('a.txt','r') # res=f.read() # print(res) # print(f.readline()) #一行一行读取包含换行符 # print(f.readline(),end='') #一行一行读出来end=''不包含换行符 # print(f.readline().strip()) #一行一行读出来end=''不包含换行符 # print(f.readline(),end='') # print(f.readlines(),type(f.readlines())) #以列表的形式全部读出文件内容 # f.close() # with open('a.txt','r') as f,open('b.txt','w'): # print(f.read())
练习:有一个文件a.txt,需要把里面的字符串‘abc’替换成字符串‘sheng’:
#第一种方法:可以全部读取文件替换内容,但是当文件量大的时候好内存 # import os # with open('a.txt','r',encoding='utf-8') as read_f,\ # open('.a.txt.swap','w',encoding='utf-8') as write_f: # msg=read_f.read() # # print(msg) # msg=msg.replace('abc','sheng') # write_f.write(msg) # os.remove('a.txt') # os.rename('.a.txt.swap','a.txt') #第一种方法:一行一行替换字符串,但是消耗磁盘Io # import os # with open('a.txt','r',encoding='utf-8') as read_f,\ # open('.a.txt.swap','w',encoding='utf-8') as write_f: # # msg=read_f.read() # # print(msg,type(msg)) # # print(read_f) # for line in read_f: # if 'fs' in line: # line=line.replace('abc','sheng') # write_f.write(line) # os.remove('a.txt') # os.rename('.a.txt.swap','a.txt')
# 练习:
# 1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
#第一种方法:可以全部读取文件替换内容,但是当文件量大的时候好内存 # import os # with open('a.txt','r',encoding='utf-8') as read_f,\ # open('.a.txt.swap','w',encoding='utf-8') as write_f: # msg=read_f.read() # # print(msg) # msg=msg.replace('abc','sheng') # write_f.write(msg) # os.remove('a.txt') # os.rename('.a.txt.swap','a.txt') #第一种方法:一行一行替换字符串,但是消耗磁盘Io # import os # with open('a.txt','r',encoding='utf-8') as read_f,\ # open('.a.txt.swap','w',encoding='utf-8') as write_f: # # msg=read_f.read() # # print(msg,type(msg)) # # print(read_f) # for line in read_f: # if 'fs' in line: # line=line.replace('abc','sheng') # write_f.write(line) # os.remove('a.txt') # os.rename('.a.txt.swap','a.txt')
总结:3个for循环读取文件的比较:
# f=open('a.txt','r',encoding='utf-8') # for i in range(2): #读取文件前两行(一行一行读取): # print(f.readline().strip()) # f=open('a.txt','r',encoding='utf-8') # for i in f: #读取文件(一行一行读取):一行一行从硬盘里面加载出来 # print(i.strip()) # f=open('a.txt','r',encoding='utf-8') # for i in f.readlines(): #全部读取文件内容 # print(i)

浙公网安备 33010602011771号