目录
一.复习回顾
1.函数
2.集合
3.序列类型
- 字符串/元组/列表(因为他们都有索引)
4.字典
二.文件和数据格式化
1.文本处理
(1)文件的理解
- 文件是存储在辅助器上的数据序列
- 文件时数据存储的一种形式
- 文件有两种展现形态:文本文件和二进制文件
- 本质上,所有文件都二进制形式存储
- 形式上,所有文件采用两种方式展示
-
文本文件
- 文件是数据的抽象和集合
- 由单一特定编码组成的文件,如UTF-8
- 由于存在编码,也被看成是存储着的长字符串
- 适用于列如:.txt文、.py文件等
- 文件是数据的抽象和集合
-
二进制文件
- 文件是数据的抽象和集合
- 直接有比特0和1组成,没有统一的字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于列如:.png文件、.avi文件等
- 文件是数据的抽象和集合
-
文本文件,二进制文件的区别
-
文本形式:
中国是个伟大的国家!
-
二进制形式:
b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
-
(2)文件的打开和关闭
-
文件处理的步骤:打开-操作-关闭
a=open(,)# 打开 a.read(size)# 读文件 a.readline(size) a.readlines(hint) a.write(s)# 写文件 a.writelines(lines) a.seek(offset)
-
文件的打开
f = open(r'E:\python folder\day06\t1.txt','r') # open是打开这个文件路径,r是read只可读 data = f.read()# f.read是读取这个文件 print(data) f.close() # 覆盖写入,清空文件后写入 f = open(r'E:\python folder\day06\t1.txt','w') data=f.write('name:xichen,age:18') print(data) f.close() f = open(r'E:\python folder\day06\t1.txt','r') data=f.read() print(data) f.close()
-
文件的打开模式
文件的打开模式 描述 'r' 只读模式,默认值,如果文件不存在,返回FileNotFoundError 'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖 'x' 创建写模式,文件不存在则创建,存在则返回FileExistsError 'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容 'b' 二进制文件模式 't' 文本文件模式,默认值 '+' 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 - 文本形式、只读模式、默认值:
f = open("f.txt")
- 文本形式、只读模式、同默认值:
f = open("f.txt", "rt")
- 文本形式、覆盖写模式:
f = open("f.txt", "w")
- 文本形式、追加写模式+ 读文件:
f = open("f.txt", "a+")
- 文本形式、创建写模式:
f = open("f.txt", "x")
- 二进制形式、只读模式:
f = open("f.txt", "b")
- 二进制形式、覆盖写模式:
f = open("f.txt"):f = open("f.txt", "wb")
- 文本形式、只读模式、默认值:
-
文件的关闭
<变量名>.close()
# 变量名为文件句柄
(3)文件的使用
-
文本形式打开
# 文本形式打开文件 tf = open("f.txt", "rt") print(tf.readline()) tf.close()
-
二进制形式打开
# 二进制形式打开文件 bf = open("f.txt", "rb") print(bf.readline()) bf.close()
(4)文件的内容读取
操作方法 | 描述 |
---|---|
读入全部内容,如果给出参数,读入前size长度,s = f.read(2) # 中国
|
|
读入一行内容,如果给出参数,读入该行前size长度,s = f.readline() # 中国是一个伟大的国家!
|
|
读入文件所有行,以每行为元素形成列表如果给出参数,读入前hint行,s = f.readlines() # ['中国是一个伟大的国家!']
|
2.词频统计
(1)英文词频统计
# 词频:单词出现的次数
f = open(r'E:\python folder\day06\t1.txt','r',encoding='utf8')# open 打开路径的文件,r是读取模式,表示只可读
data = f.read().lower()# 把读取到的内容赋给data的时候同时转成小写
# print(data)# 得到的数据是str型
# print(type(data))# type 是用来测试返回值的类型的/这里指的是data的类型
data_split = data.split(' ')# 用切割的方法将读取到的数据 根据空格来切割
# print(data_split) # 打印出切割过后的data_split,切割过后的返回值是一个列表
count_dict = {} # 定义一个空的字典count_dict
for word in data_split:# 循环输出data_split这个列表
if word not in count_dict:# 判断每一次循环data_split的word是否在这个count_dict空的集合里
count_dict[word] = 1 # 如果不在(not in)那这个ount_dict空的集合就+上这个单词word
else:
count_dict[word] += 1# 如果这个word已经在这个count_dict集合里,那这个单词的数量就+1
print(count_dict)
def func(i):# 直接可以拿来用的func函数
return i[1]# 把lt这个列表里的元素取出来放在func里面的,然后进行排序
lt = list(count_dict.items())# 将count_dict这个集合的键值对(key,value)取出来以后用list强制转换成列表类型赋给列表lt
lt.sort(key=func)# 调用func这个函数,对lt列表key的内容进行排序,是升序的
lt.reverse()# 在将lt列表转为逆序排序
for i in lt[0:10]:
print(f'{i[0]:^7}{i[1]^5}')
# dic = {}
# dic['the'] = 0
# dic['hamlet'] = 10
# print(dic)
(2)中文词频统计
# 统计中文(三国演义的书)
import jieba
f = open(r'E:\python folder\day06\threekingdoms.txt', 'r', encoding='utf8')
# open打开文件所在的路径,把文件赋给f,r代表只读模式,encoding='utf8'代表读取文件的编码格式
data = f.read()# read读取这个f文件,把读出来的值赋给data
# print(data)
data_jieba = jieba.lcut(data) # 调用jieba库把data文件给分词,然后赋给一个新的变量data_jieba
print(type(data_jieba))
count_dict = {}# 定义一个空的集合count_dict
for word in data_jieba: # 循环jieba库分词出来的数据,也就是放在data_jieba列表里面的数据,
if len(word) == 1:# 判断循环出来的词的长度是否等于1
continue# 如果等于1,就结束本次循环
if word in {"将军", "却说", "荆州", "二人", "不可", "不能", "如此", "商议"}:
continue# 判断循环出来的词是否在{"将军", "却说", "荆州", "二人", "不可", "不能", "如此", "商议"}这个集合里
# 如果在这个集合里,那就结束本次循环
if '曰' in word:# 判断’曰‘这个词是否在循环的这个词里
word = word.replace('曰', '')# 如果在的话,那就用空的字符替换曰
if word in count_dict:# 如果循环的这个词已将在我们定义的count_dict这个集合里面了
count_dict[word] += 1# 那count_dict[word]的值就累加1,用来计数
else:
count_dict[word] = 1# 如果不在,那就在集合里面添加这个词,并且赋给他值1
def func(i):# 调用func这个函数
return i[1]
data_list = list(count_dict.items()) # 将我们得到count_dict集合里面的的键值对取出来,将他转换为list列表赋给data_list
data_list.sort(key=func)# 将data_list列表里的key的值(value)调用上面的func的函数,让他的value的值按升序排序
data_list.reverse()#在将他逆序
print(data_list)
3.词云
# pip install matplotlib
# pip install wordcloud
# pip install scipy
# pip install pillow
# pip install imageio
import wordcloud
from imageio import imread
mask = imread(r"E:\python folder\day06\test7.png")
f = open(r'E:\python folder\day06\threekingdoms.txt', 'r', encoding='utf8')
data = f.read()
w = wordcloud.WordCloud(font_path=r'C:\Windows\Fonts\simkai.ttf', mask=mask, width=1000, height=700,
background_color="white")
w.generate(data)
w.to_file('outfile.png')
3.作业
1.定义一个函数,该函数可以实现在内部输入一个信息,如何该信息不能转换为正整数,则重新输入,直到能转换为正整数,则对外返回转换的正整数
def get_int():
while True:
data =input('请输入一个数:')
if data.isdigit():# 判断输入的数是不是数字
return int(data)
res = get_int()
print(res)
2.定义一个函数,该函数可以实现在内部输入一个信息,如何该信息不能转换为负整数,则重新输入,直到能转换为负整数,则对外返回转换的负整数
def get_int():
while True:
data = input('data: ')
if data.isdigit():
return int(-1*data)
elif data.startswith('-') and data[1:].isdigit() and data.count('-') == 1:
num = data.split('-')[1]
if num.isdigit():
return int(data)
else:
num = data.split('.')
num = str(num[0])
return num
else:
num = data.split('.')
num=str(num[0])
return int(num)*-1
res = get_int()
print(res)
3.定义一个函数,实现外界传入一个信息,内部判断是否能被转换为正整数,返回True | Flase信息
def get_int():
data=input('data:')
if data.startswith('-') and data[1:].isdigit() and data.count('-') == 1:
return True
if data.isdigit():
return True
else:
return False
res = get_int()
print(res)
4.定义一个函数,实现外界传入一个信息,内部判断是否能被转换为负整数,返回True | Flase信息
def get_int():
data = input('data:')
if data.startswith('-') and data[1:].isdigit() and data.count('-') == 1:
return True
if data.isdigit():
return True
if '.'in data:
return True
else:
return False
res = get_int()
print(res)
5.定义一个函数,实现传入一个整型数字,判断并直接打印该数字是否是奇数还是偶数
def get_int(data):
if data%2 ==0:
print('data是个','偶数')
else:
print('data是个', '奇数')
get_int(101)
6.写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def get_list(data):
res=[]
ls=['xichen','beautiful','xuchen','height','weight']
if data > 2:
print(ls[:2])
return ls[2:]
else:
print(ls)
res=get_list(3)
res=get_list(2)
7.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def get_list(data):
ls = [ ]
for i in range(len(data)):
if i % 2 == 1:
ls.append(data[i])
print(ls)
data = ['xu','chen','cheng','yu','cheng','xing']
res = get_list(data)
8.定义一个函数,只要传入 "k1:v1,...,kn:vn" 这样固定格式的字符串,都可以将其转换为 {'k1':'v1',...,'kn':'vn'}这样的字典并返回
def get_dict(data):
dic1 = dict()
ls = t.split(',')
for i in ls:
ls2=i.split(':')
dic1[ls2[0]]=ls2[1]
print(dic1)
t="k1:v1,k2:v2,k3:v3,k4:v4,kn:vn"
get_dict(t)
9.简单购物车,要求如下 (可以用函数也可以不用):# 实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入,购买成功后打印添加到购物车里的信息.
def get_yes():
while True:
ls=[]
msg_dic={'apple':10,'tesla':100000,'mac':3000,'lenovo':30000,'chicken':10,}
for i in msg_dic.items():
tu=i
print('name:',tu[0],'price:',tu[1])
for i in msg_dic.items():
name = input('商品>>:')
num = input('购买个数>>:')
if name in msg_dic and num.isdigit():
ls.append((name, msg_dic[name], num))
print(ls)
else:
continue
res=get_yes()
print(res)