Python实训day03pm【列表生成式、非文本文件的读写与复制、文本文件读写练习】

目录

1、列表生成式

2、列表的嵌套

2.1、习题1

2.2、习题2

3、非文本文件的读写

3.1、读取文件的大小

3.2、复制文件

4、课堂练习


  1. 列表生成式
  2. 非文本文件的读写

1、列表生成式

非常方便的得到一个列表:[元素 for遍历  if筛选]

# [1,2,3,4,5,6....,100]
l1 = [x for x in range(1, 21)]
print(l1)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

l2 = [x * x for x in range(1, 21)];
print(l2)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]

l3 = [x for x in range(1, 21) if x % 2 == 0]
print(l3)  # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# 得到20个,1-20范围的随机数
import random as rd

l4 = [rd.randint(1, 20) for x in range(20)]
print(l4)  # [17, 9, 19, 9, 12, 15, 3, 18, 19, 14, 14, 20, 8, 9, 9, 14, 18, 7, 18, 8]

# A-Z
l5 = [chr(x) for x in range(65, 91)]
print(l5)  # ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

l6 = [x + y for x in ['A', 'B'] for y in ['a', 'b']];
print(l6)  # ['Aa', 'Ab', 'Ba', 'Bb']

# 有一个list全是数字,[1,2,3,4,5,6,7,8,9,10],将他们都变为字符串
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ss = [str(x) for x in nums];
print(ss)  # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

2、列表的嵌套

2.1、习题1

# 地址、引用数据类型等的理解
l1 = [];
l2 = [1, 2, 3];
l1.append(l2);  # 将l2加入到l1中
print(l1)  # [  [1, 2, 3]  ]

l2.append(4);
print(l1);  # l1有变化吗?? [ [1, 2, 3, 4] ]

# 如果不想变化:
#     向l2中添加的是与l1相同的一个集合,而不是l1本身【l1副本】
#     .copy、切片、list()

2.2、习题2

#想得到一个大集合list,格式为:
[
  ['A'],
  ['A','B'],
  ['A','B','C'],
  ['A','B','C','D']
    ......
  ['A'......'Z'] 
]

 

list1 = [];
list2 = [];  # 总的集合
for x in range(65, 91):
    list1.append(chr(x));
    # list2.append(list1[:]);  # 注意要创建副本
    list2.append(list(list1));
# print(list2)
for i in list2:
    print(i)

3、非文本文件的读写

3.1、读取文件的大小

 

# 非文本文件的读写:.doc .xls .jpg .mp3 .mp4等
# 读到的内容就是单纯的01序列,不要尝试着使用某种编码方式给它解码,没有意义。
f = open(r'C:\Users\lwx\Desktop\种树.jpg', 'rb');  # 不要忘了b、byte 原本字节的内容
ct = f.read();  # 字节序列类型的结果  b'\x \x  \x  \x  \x .....'
f.close();
print(len(ct))  # 40764个字节

3.2、复制文件

# 非文本文件一般很少读取;读+写,来完成拷贝。
f = open(r'C:\Users\lwx\Desktop\种树.jpg', 'rb');
ct = f.read();
f.close();

f1 = open(r'D:\种树-copy.jpg', 'wb');  # 写也是要加b
f1.write(ct);
f1.close();

后续就需要解决一些问题:爬虫、Excel处理(数据处理)、图片处理等具体的工作。

4、课堂练习

课堂练习:
1、读取infos.txt文件。
2、处理,得到list+dict的数据结构:[{'name':xxx,'sex':xxx,'score':xxx},{...},{...},{...}]
3、操作数据得到:
    1、打印所有学生人数
    2、打印最高分是谁,多少分
    3、打印及格多少人,不及格多少人
    4、求班级的平均分
    5、统计有多少个姓张的同学

技术点:文件读取、字符串操作、list操作、dict操作。

杜静    女    71
齐根芳    女    72
郑忠营    男    72
孔小康    男    60
胡书畅    男    84
刘新良    男    0
潘恩奇    男    60
张展硕    男    75
高文达    男    79
王康萍    女    67
范乃晖    男    64
宋天宇    男    60
韩振威    男    60
张儒超    男    60
李蕊    女    87
张永丽    女    73
董梦雪    女    81
孙晶晶    女    83
刘淑明    女    69
崔梦琪    女    70
郑钰森    男    60
崔孟男    男    73
周航飞    男    76
刘雯婷    女    75
丁需峰    男    65
陈思宇    男    75
王振铎    男    65
李文桐    女    60
吉世平    男    61
牛肖凯    男    0
魏西琳    女    65
张邵娴    女    60
陈艳    女    69
李春晖    男    71
张舟    男    65
胡深    男    83
郝瑞祥    男    65
蔡成帆    男    82
刘伟平    男    60
左宇航    男    60
丁浩    男    72
金湾湾    女    83
秦嘉康    男    60
邢家浩    男    70
王自闯    男    64
邸新伟    男    67
曹元博    男    72
李晴    女    60
毛梦园    女    76
李凯    男    60
高迎春    男    72
杜家乐    男    82
刘兆京    男    76
苏岩    男    60
刘家龙    男    71
单祖皓    男    80
葛圣旗    男    72
王璐浩    男    60
李潇潇    女    83
边继辉    男    64
张莹莹    女    63
陈震东    男    70
朱攀攀    男    72
张宇    男    60
陈辛源    男    74
卢良辉    男    65
李文想    男    79
马甜甜    女    69
岳俊芳    女    75
吉庆    男    63
马春飞    男    74
乔楷罡    男    79
王志斌    男    72
李录录    女    81
侯晓盼    女    81
徐家洋    男    60
史雪程    女    61
赵梦雨    男    60
浮佳伟    男    60
马路坤    男    77
时浩田    男    60
赵亚非    男    73
邢琳琳    女    77
刘通    男    61
张志昌    男    74
张聪聪    女    68
窦明晨    男    74
葛艺茗    女    65
刘倩倩    女    78

 

f1 = open(r'C:\Users\lwx\Desktop\infos.txt', 'r', encoding='utf-8');
infos = f1.read();  # 读取字符串
f1.close();
# print(infos)

stus = infos.split('\n');
# print(stus)

# 例如x: '杜静\t女\t71'
rs = [{'name': x.split('\t')[0], 'sex': x.split('\t')[1], 'score': int(x.split('\t')[2])} for x in stus]
print(rs);

# 1、打印所有学生人数
print('人数:', len(rs))
# 2、打印最高分是谁,多少分 {'name': '杜静', 'sex': '女', 'score': 71}
rs.sort(key=lambda x: x['score'], reverse=True)
print(rs[0])

# 3、打印及格多少人,不及格多少人【手动遍历+计数:python filter】
jgnum = len(list(filter(lambda x: x['score'] >= 60, rs)));
notjg = len(rs) - jgnum;
print("及格:", jgnum);
print('不及格:', notjg);

# 4、求班级的平均分【手动遍历+求和:sum函数,对列表求和 】
zong = sum([x['score'] for x in rs]);
print('平均分:', round(zong / len(rs), 2));  # round保留两位小数

# 5、统计有多少个姓张的同学
zhlist = list(filter(lambda x: x['name'][0] == '张', rs));
print('姓张的人数:', len(zhlist));

保重生命的人减少情欲,保养身体的人远避荣名。——林通《省心录》

 加油~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upward337

谢谢老板~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值