第二章: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,'&'))
View Code

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())
View Code

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)
View Code

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)
View Code

 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)
View Code

  

总结:

(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}
innot 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.close()

关闭文件。关闭后文件不能再进行读写操作。

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

file.next()

返回文件下一行。

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

file.readline([size])

读取整行,包括 "\n" 字符。

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

file.seek(offset[, whence])

设置文件当前位置

file.tell()

返回文件当前位置。

file.truncate([size])

从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。

file.write(str)

将字符串写入文件,没有返回值。

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

文件常用操作:

# 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)

 

posted @ 2017-07-09 14:14  ShengLeQi  阅读(287)  评论(0)    收藏  举报