首页 > 代码库 > 三:python数据类型和文件操作
三:python数据类型和文件操作
一:字符串操作
1.字符串是可以通过下标来进行取值的,但是由于字符串是不可变变量,不能通过下标来修改它的值
7.强制类型转换函数
#int()
#float()
#str()
#list()
#tuple()
8.必须要知道、会的字符串方法
9.字符串方法
name = ‘heLLo world‘
import string
print(string.ascii_letters+string.digits)#大小写字母+数字
print(string.ascii_lowercase)#所有的小写字母
print(string.ascii_uppercase)#所有的大写字母
print(string.digits)#所有的数字
# print(name.capitalize()) # 首字母大写
# print(name.center(5, ‘*‘)) # 50个-,把name放中间
# print(name.endswith(‘d‘)) # 是否以x结尾
# print(name.find(‘sss‘))
# 查找字符串的索引,找到的话返回第一次出现的索引,找不到返回-1
# print(name.format(name=‘niuniu‘, age=18)) # 这个是格式字符串,再第一节的博客里面已经写了
# print(name.format_map({‘name‘: ‘niuniu‘, ‘age‘: 19})) # 这个也是格式化字符串,后面跟的是一个字典,字典在后面也会写
# print(‘abA123‘.isalnum()) # 是否包含数字和字母
# print(‘abA‘.isalpha()) # 是否是英文字母
# print(‘122‘.isdigit()) # 是否是数字
# print(‘11sdf‘.isidentifier()) # 是否是一个合法的变量名
# print(‘aA‘.islower()) # 是否是小写字母
# print(‘AA‘.isupper()) # 是否是大写字母
# print(name.lower()) # 变成小写
# print(name.upper()) # 变成大写
names = [‘zcl‘,‘py‘,‘zyz‘]
strnames = ‘ABCEDF‘
# print(‘¥‘.join(strnames))
# print(‘strname:‘,strnames)
# join是用来通过某个字符串拼接一个可迭代对象的的每个元素的
#所有字符串的方法,它都不会修改原来字符串的值,都会产生一个新的字符串
# print(‘wubing\nhouning‘)
# print(‘\nmysql \n‘.lstrip()) # 默认去掉左边的空格和换行
# print(‘\nmysql \n‘.rstrip()) # 默认去掉右边的空格和换行
# print(‘\nmysql \n‘.strip()) # 默认去掉两边边的空格和换行
# print(‘mysqlm ‘.strip(‘m‘))#当你传入某个字符串的话,它就只会去掉你指定的字符串
# p = str.maketrans(‘abcdefg‘, ‘1234567‘) # 前面的字符串和后面的字符串做映射
# print(‘ccaegg‘.translate(p)) # 输出按照上面maketrans做映射后的字符串
#
# new_p = str.maketrans(‘1234567‘, ‘abcdefg‘)
# print(‘ccaegg‘.translate(new_p))
st= ‘mysql is db. mysql mysql mysql‘
print(st.replace(‘mysql‘, ‘oracle‘)) # 替换字符串
# print(‘mysql is is db‘.rfind(‘is‘)) # 返回最右边字符的下标
# names = [‘zcl‘,‘py‘,‘zyz‘]
new_name = []
#1、先得有一个list存它
#2、循环判断逗号分隔的值
name1 = ‘zcl p y zyz‘
# print(name1.split())
#切割字符串,返回一个list,按照你指定的字符串去分隔这个字符串,然后放到一个list里面
#如果你什么都不写的话,按照空格分割,多个空格也算一个
# print(‘1+2+3+4‘.split()) # 切割字符串,返回一个list
# print(‘1+2+3\n1+2+3+4‘.splitlines()) # 按照换行符分割
# print(‘Abcdef‘.swapcase()) # 大小写反转
a = 0
b = 2
#不引入第三个变量
a = a+b
#a是3
b = a-b
#b是1
a = a-b
#a是2
print(‘=====这里才是咱们要看的‘)
print(a,b)
#引入第三个变量的方法
# c = a
# #c是1
# a = b
# #a是2
# b = c
# print(a,b)
#不用第三方变量,把a和b的值交换过来
# a,b = b,a
# print(‘a:‘,a)
# print(‘b:‘,b)
a,b = b,a
print(‘a:‘,a)
print(‘b:‘,b)
二、列表操作
1.列表是可变变量,它是可以通下标修改值的
三、切片
切片操作对字符串也是完全适用的
name1 = ‘zcl,pyzyz‘
names = [‘zcl‘,‘py‘,‘zyz‘]
# print(names[0:2])# 从第几个取到第几个,这个也是顾头不顾尾
# print(names[:2])# 如果是从第一个开始取,取到某一个下标结束,那么最前面是可以不写的
# print(names[1:])#如果是从前面某个开始取,取到最后面结束,那么最后面是可以不写的
# print(names[:])#如果最前面和最后面都不写的话,取整个列表
#nums = list(range(1,11))
# print(nums[1:10:2])#如果最后面写上步长的话,就是每隔几个取一次
# nums.reverse()
print(nums)
print(nums[::2])
print(nums[::-2])
print(nums[::-1])
#当切片的步长为负数时,是从末尾开始取值的,然后隔几个取一次
#如果步长为-1的时候,还有反转的功能
四、元组
lis = [‘127.0.0.1‘,‘3306‘]
tp = (1,2,3,4,5,6,1,1,1)
lis[1]=‘3307‘
print(lis)
print(tp[0])
print(tp.count(1))
print(tp.index(1))
#元组是一个不可变的list,只有count方法和index方法
#定义元组的时候,如果元组只有一个元素,那么你要在这个元素后面,加一个逗号,要不然就是一个字符串
new_lis = tuple(lis)
print(type(new_lis))
a=‘hello world‘ #这个是定义字符串
b=(‘hello world‘,) #这个是定义元组?
print(‘this is‘,type(b))
五、字典
1.字典里面的key是不能重复的
info = {
‘name‘:‘xiaoming‘,
‘sex‘:‘nan‘,
‘age‘:20,
‘id‘:1,
}
# print(info[‘id‘])#通过key取值
# print(info[‘addr‘])#通过key取值
# print(info.get(‘id‘))#通过key取值
# print(info.get(‘addr‘))#通过key取值
2.用中括号取值和get方法取值的区别 ,get方法获取不到key的时候,不会报错,中括号取值找不到key会报错,get方法还可以多传一个参数,如果get不到key的话,那么返回xx,如果不写的话,默认get不到返回None
info[‘addr‘] = ‘Beijing‘#给字典新增一个值
info.setdefault(‘phone‘,13811111)#给字典新增一个值
info[‘id‘] = 7#在有这个key的情况下那就是修改这个key的value,没有这个key的话,就是新增
3.字典是无序的
# del info[‘addr‘]
# print(info.pop(‘addr‘))
# info.popitem()#随机删除一个元素
# print(info)
#pop删除的时候必须得指定key,pop方法会返回删除的key对应的value
# info.clear()
#清空字典
all = {
‘car‘:
{
‘color‘:[‘red‘,‘yellow‘,‘black‘],
‘moeny‘:1111111,
‘pailiang‘:"2.5L",
‘name‘:"BMW"
} ,
‘car1‘:
{
‘color‘:[‘red‘,‘yellow‘,‘black‘],
‘moeny‘:1111111,
‘pailiang‘:"2.5L",
‘country‘:"china"
},
‘car2‘:
{
‘color‘:[‘red‘,‘yellow‘,‘black‘],
‘moeny‘:1111111,
‘pailiang‘:"2.5L"
}
}
# all.get(‘car‘).get(‘color‘)[1] = ‘orange‘
# all[‘car‘][‘color‘][1]=‘orange‘
# print(all)
# print(all.keys())#获取该字典的所有key
# print(all.values())#获取该字典所有的value
# print(all.items())#获取字典的key和value,循环的时候用
#直接循环字典循环的是字典的key,如果想循环的时候同时获取到key和value
#那么就要用.items方法
info2 = {
‘name‘:"hhh",
‘sex‘:‘nan‘
}
info.update(info2)#把两个字典合并到一起,如果有一样的key,那么更新value
# print(info)
# print(info2.items())
#items方法的作用就是为了让你循环的时候同时把key和value取到
# for k,v in info.items():
# print(‘%s is %s‘%(k,v))
# for k in info2:
# print(k)
# for k in info2:
# print(k,info2[k])
#第二种方式效率比较高
#info.has_key(‘name‘)
#python2里面有这个方法,是判断key是不是存在的,python3里面没有
# print(‘name‘ in info2)
#python3里面直接用in来判断key是否存在
六、文件读写
1、先打开文件
2、读取/写入内容
3、保存文件
import os
f = open(‘a.txt‘,‘a+‘,encoding=‘utf-8‘)#f代表的是这个文件的对象,也叫句柄
f.seek(0)#移动文件指针
#文件对象也是可迭代的
# count = 0
#直接循环文件对象的话,循环的是文件每一行的内容
# res = f.read()
# f.seek(0)
# f.truncate()#清空文件内容
# new_res = res.replace(‘nihao‘,‘nibuhao‘)
# f.write(new_res)
#8G的文件
#下面这些是修改文件内容的
# f = open(‘a.txt‘,‘a+‘,encoding=‘utf-8‘)
# #f代表的是这个文件的对象,也叫句柄
# f.seek(0)#移动文件指针
# fw = open(‘a.txt.new‘,‘w‘,encoding=‘utf-8‘)
# for line in f:
# new_res = line.replace(‘学‘,‘不学‘)
# fw.write(new_res)
# f.close()
# fw.close()
# os.remove(‘a.txt‘)
# os.rename(‘a.txt.new‘,‘a.txt‘)
# print(f.read())#读文件内容,返回的是一个字符串
# print(f.readlines())##读文件内容,返回的是一个列表
# print(f.readline())#只读文件一行的内容
# f.write(‘zhangyizhou‘)#写文件的时候,只能是字符串
# f.writelines([‘123‘,‘456‘,‘789‘])#可以把列表写到里
#如果在打开的文件的时候,不指定模式,那就是读模式
# fw = file(‘a.txt‘,‘r‘)
#在python2里面也可以用file这个函数去操作文件,但是在python3里面只能用open
#文件打开模式有3种
#1、w写模式,它是不能读的,如果用w模式打开一个已经存在的文件,
#会清空以前的文件内容,重新写
#w+,写读模式,只要沾上w,肯定会清空原来的文件
#2、r读模式,只能读,不能写,而且文件必须存在
#r+是读写模式,只要沾上r,文件必须得存在
#3、a追加模式,也是只能写,在文件的末尾添加内容
#4、rb+、wb+,ab+,这种是二进制模式打开或者读取,一些音乐文件、图片等等
#flush用法
import time
fw = open(‘python.txt‘,‘w‘,encoding=‘utf-8‘)
fw.write(‘下周不上课!‘)
fw.flush()#写完之后立马生效
exit(‘拜拜‘)
time.sleep(30)
fw.close()
#with的用法,你文件不再用的时候,就会自动给你关闭文件
# with open(‘python.txt‘,encoding=‘utf-8‘) as fr:
# print(fr.read())
三:python数据类型和文件操作