数据内置方法与python操作文件(补)

昨日内容回顾

运算符之逻辑运算

运算符之身份运算

运算符之成员运算

代码的缩进

流程控制之if判断

if
elif
else
三个语句优先级别相同,只会同时满足执行一个条件
# 成绩评判系统
# 用户登录判断

流程控制之while循环

while 条件
	循环体
条件成立就会执行代码,
break
	借宿本层循环
continue
	结束本次循环
# 循环打印数字
# 用户循环登录

流程控制之for循环

for 变量名 in 可迭代对象:(字符串,列表,字典)
	循环体代码
依次取出可迭代对象中的每个元素,分别指向循环体代码
for循环不需要加结束条件,可迭代对象取完直接结束

range方法

range看成是可以帮助你残生已退数的方法
range(10) 		#0123456789
range(1,10) 	#123456789
range(1,10,2)	#13579

数据类型的内置方法

int
float

针对字符串
1.索引取值
2.切片取值
3.步长
4.统计长度
5.移除字符串首尾特定字符

今日日内容概要

  • 数据类型内置方法之字符串

  • 数据类型内置方法之列表

  • 数据类型内置方法之字典

  • 可变类型与不可变类型

  • 元组与集合

  • 字符编码

  • 文本转义

  • 文件操作

  • 路劲

  • 作业

今日内容详细

数据类型内置方法之字符串

res='jason|123|read'
# 字符串的切割操作(按照指定的子符切割数据)
'''当你看见字符串里面有固定的符号作为分隔符,那么应该考虑切割'''
结果是一个列表
print(res.split('|'))

字符串转大小写
res1 = ''
print(res1.upper())
print(res1.lower())

3.判断字符串是否是纯数字
# res2 = input('res2>>>:')
# print(res2.isdigit())
4.判断字符串是否以什么开头或者结尾
# res3 = 'jason'
# print(res3.startswith('j'))  # True
# print(res3.startswith('a'))  # True
# print(res3.endswith('n'))  # True
# print(res3.endswith('b'))  # False
5.字符串的格式化输出
方式一:占位符 %s %d
方式二:format
# print('my name is {} my age is {}'.format('jason', 18))
# 2.根据索引可以重复使用数据
# print('{0} my {0} name is {0} my {1} age is {1}'.format('jason', 18))
# 3.指名道姓的获取数据
# print('{name} my name {age} is {name} my age is {age}'.format(name='jason', age=18))
# 6.替换字符串
res4 = 'egon is NB NB NB NB egon egon egon'
# 将字符串中的egon替换成jason(类似于word中的全局替换)
print(res4.replace('egon', 'jason'))  # jason is NB NB NB NB jason jason jason
# 局部替换
print(res4.replace('egon', 'tony', 1))  # tony is NB NB NB NB egon egon egon

数据类型内置方法之列表

l = [11, 22, 33, 44, 55, 66, 77]
1.索引取值
# print(l[0])
# print(l[-1])
# print(l[-2])
2.切片取值
# print(l[1:4])  # [22, 33, 44]
3.步长
# print(l[1:4:2])  # [22, 44]
4.统计长度(统计元素的个数)
# print(len(l))  # 7
5.添加数据(尾部追加)
# l.append(88)  # [11, 22, 33, 44, 55, 66, 77, 88]
# l.append([11,22])  # [11, 22, 33, 44, 55, 66, 77, 88, [11, 22]]
# print(l)
6.插入数据
# l.insert(0,888)  # (索引位置,数据)
# print(l)
7.扩展列表
# l1 = ['jason', 'tony', 'kevin']
# l.extend(l1)  # 内部原理就是for循环+append操作
# for i in l1:
#     l.append(i)
# print(l)
8.删除列表元素
# l.remove(11)  # 指定元素
# l.pop()  # 尾部弹出元素
# del l[1]  # 通用的删除数据方法
# print(l)
9.列表生成式(重要)
ll = ['jason', 'tony', 'tom', 'jerry']
# 需求:将列表中所有的人名后加上NB后缀生成一个新列表
# new_l = []
# # 循环获取ll里面每一个人名
# for name in ll:
#     # 在每个人名后拼接NB
#     new_name = name + 'NB'
#     # 添加到新的列表中
#     new_l.append(new_name)
# print(new_l)
# 一行代码解决上述需求
# new_l = [name + 'NB' for name in ll]  # 先for循环 在字符串拼接 最后生成列表
# print(new_l)  # ['jasonNB', 'tonyNB', 'tomNB', 'jerryNB']
10 排序
l2 = [22, 66, 33, 55, 44, 99, 77, 88, 11]
# l2.sort()  # 默认是升序
# print(l2)  # [11, 22, 33, 44, 55, 66, 77, 88, 99]
l2.sort(reverse=True)  # 降序
print(l2)  # [99, 88, 77, 66, 55, 44, 33, 22, 11]

数据类型内置方法之字典

user_dict={}
1.按照Key取值
print=(user_dict['username'])
# 键不存在会直接报错
print(user_dirt.get('username'))
# None(空)  键不存在不会报错
2.统计键值对的个数
print(len(user_dict))
3.修改数据
user_dict['username'] = 'tony'
print(user_dict)  # {'username': 'tony', 'age': 18, 'hobbies': ['read', 'run', 'music']}
user_dict['password'] = 123 
# 将username键对应的值修改为tony,键存在的情况下修改,键不存在就直接添加
user_dict['']=''
4.删除数据
user_dict.pop('username')
print(user_dict)
# 指定键 弹出对应的键值对数据

可变类型与不可变类型

可变类型:值改变,内存地址不变(列表,字典)
不可变类型:值改变,内存地址肯定变(整型,浮点型,字符串)
# res = 'jason'
# print(id(res))
# res = res + 'NB'
# print(id(res),res)

l = [11, 22, 33]
print(id(l))
l.append(44)
print(id(l))
"""
如果不明白,那么直接记忆即可
"""

元组与集合

元组内元素不能被修改,可以看做不可做修改的列表
t = (1,2,3)
1.索引取值
print(t[0])

集合内元素必须是不可变类型(数字,字符串)
s = {1,2,3}
# 去重 集合内不可能存在重复的元素,自动去重
# 关系运算
f1 = {'jason', 'jerry', 'tom', 'owen'}
f2 = {'jason', 'kevin', 'oscar', 'jerry'}
# 求两个人共同好友
print(f1 & f2)  # {'jerry', 'jason'}
# 求两个人的所有好友
print(f1 | f2)  # {'jerry', 'owen', 'jason', 'kevin', 'oscar', 'tom'}
# 求某个人的独有的好友
print(f1 - f2)  # {'tom', 'owen'}
print(f2 - f1)  # {'kevin', 'oscar'}
# 求两个人各自独有的好友
print(f1 ^ f2)  # {'tom', 'owen', 'oscar', 'kevin'}

字符编码

字符编码的发展史
字符编码主要是用于研究文件内部数据的存储原理
1.一家独大
	诞生于美国,美国人使用的是英文
    而计算机只认识01二进制数,如何让计算机能够认识英文字符
    美国人发明了英文字符与数字对应的关系的标准
    ASCII码
    对应了英文字符与数字和二进制对应关系
    00000000 8bit=1bytes
    其实7位足够表示所有的英文,多一位是为了后续扩展考虑

2.群雄割据
	其他国家的人也开始用计算机
	中国GBK
    	该编码表记录了中文字符,英文字母与数字的对应关系
    日本shift—JIS
    # 导致不同国家之间的计算机无法实现数据交互,编码表不一样
    
3.天下一统
	unicode万国码
    记录了所有国家的字符与数字的对应关系
    使用unicode在存储数据的事后统一都是采用2bytes存储数据
    utf-8由此而生
    针对英文还是采用1bytes
    针对中文采用bytes
    
'''
我们目前使用文本文件存储数据时
默认就是utf-8
'''
# 应用
学习完字符表之后能够解决文件打开之后乱码的问题
	文件之所以乱码,是编码表不同
我们解决乱码的方式其实就是保住文件在存储和打开的时候采用的是同一个编码本即可

文本转义

# 斜杠与字母的组合有时候会产生特殊意义
res = 'D:\project\nython\tachong'
print(res)
# 取消转义
res1 = r'D:\project\nython\tachong'
print(res1)

文件操作

通过python代码来操作文件的读写过程

# 下面的写法不推荐使用 因为每次open都需要close
# f = open(r'aaa.txt', 'r', encoding='utf8')
# print(f.read())  # 读取文件内容
# f.close()  # 关闭文件
# 推荐使用with语法

# 只能打开文本文件
# with open(r'aaa.txt', 'r', encoding='utf8') as f:
#     print(f.read())  # 当with的子代码执行完毕之后会自动帮你调用close
# 打开所有文件
with open(r'D:\数据分析三期\linux基础\day5\day5-昨日回顾、重定向、打包压缩.mp4', 'rb') as f:
    for line in f:
        print(line)

路劲

路劲就是用来标识文件位置的信息
相对路劲
	需要有一个参考物

绝对路径
	不需要参考物

作业

1.至少使用两种方法完成列表中所有的人名全部变大写
	ll = ['jason', 'tony', 'tom', 'jerry']
    ps:1.常规的for循环实现  2.列表生成式
2.复习本周所有的内容,整理出笔记
3.完成今日笔记书写
posted @ 2021-01-11 12:07  KaiLun  阅读(43)  评论(0)    收藏  举报