python学习的第二天

Python文件操作

读取文件
内置函数open file='文件的路径"相对路径即可。 “.”是代表当前文件下 ; “/”代表文件夹之间的分隔; mode='r' 只读方式; encoding='UTF-8' ,编码方式中文都是UTF-8。英文编码方式使用GBK

打开文件 例如

f = open(file='./threekingdom.txt', mode='r', encoding='UTF-8')
words = f.read()
print(words)
  • 关闭流
f.close()
print(len(words))
print(type(words))

Python排序

打乱函数
代码案例

# 创建一个列表[1.2.3....9]
li = []
for i in range(10):
    li.append(i)
print(li)
from random import shuffle               # 调用打乱函数
shuffle(li)             # 打乱函数
print('打乱后', li)

排序 first

# 创建一个列表[1.2.3....9]
li = []
for i in range(10):
    li.append(i)
print(li)
from random import shuffle        # 调用打乱函数
shuffle(li)             # 打乱函数
print('打乱后', li)
li.sort(reverse=True)    #排序
print('排序后', li)

列表中含字典的排序

stu_info = [
    {'name': 'zhangsan', 'age': 33},
    {'name': 'asd', 'age': 56},
    {'name': 'cas', 'age':3},
    {'name': 'fvd', 'age':104},
]
print(stu_info)

函数def

格式如下:
def函数名():
函数体

def sort_by_age(x):
    return x['age']

# 按照年龄排序
 #key 是接受一个函数名   用于指定按照什么顺序排列

stu_info.sort(key=sort_by_age)         # 调用函数,排列默认正序排列
print('排序后', stu_info)

def sort_by_name(x):
    return x['name']

stu_info.sort(key=sort_by_name, reverse=True)    # reverse=True倒序排列
print('排序后', stu_info)

列表中含元组的排序
代码案例

stu_info = [
    ('zda', 89),
    ('asd', 24),
    ('fdsa', 2),
]
print(stu_info)
def sort_by_tuple(x):
    return x[1]
stu_info.sort(key=sort_by_tuple)
print('排序后', stu_info)

外引

# 交换两个变量
a = 10
b = 100
print('a=', a,'b=', b)
a, b = b, a
print('a=', a,'b=', b)

#可以一次声明多个不同类型变量
c, d, e = 100, [98, 56], 'asd'
print(c)
print(d)
print(e)

词云绘制

在这里先介绍引入第三方库函数,语法是
from 模块名字 import name1,name2
例如
from random import randint
等效于
import random
random.randint
当我们引用第三方库函数时通常先下载安装第三方库,我们通常使用Terminal通过pip install + 库名下载 , 但是有时候会出现一些不能下载的问题,这种情况很常见,我们怎么去解决呢?这里介绍有三种方法。
1.GUI界面安装第三方库可以在PyCharm工具栏小板手处安装,具体过程:小扳手--project+文件夹名--project inter prefer--右上角“+”--搜索到将其选择--Install Package,下载安装即可
2.本地安装方法
在https://www.lfd.uci.edu/~gohlke/pythonlibs/里找到你想要安装的GUI库文件,可以下载win32.whl的,这个跟你电脑多少位操作系统无关,下载后copy到当前工程文件夹下,点击Terminal后输入pip install + 下载的文件名(输入几个关键字按Tab即可有提示)。
3.在所用的JetBrains PyCharm 2019.1.1 x64软件的路径下所存的py格式的文件夹出单击文件夹,按住shift再按鼠标右键,选择“在此处进入Powersshell窗口”,在窗口中同样可以进行下载。
而词云绘制需先下载wordcloud第三方库。
首先绘制一个简单的英文词云,代码如下

from wordcloud import WordCloud
#如何绘制一个简单的词云
#1.英文词云
txt = 'i like  python , python is the best project language in the word'
wc = WordCloud().generate(txt)
wc.to_file('python.png')

循循渐进 1. 先绘制三国小说词云
案例代码如下

import jieba        #引入jieba库 ,第一天学习到的知识,可以去前一篇看
from wordcloud import WordCloud       #引入wordcloud库  
import imageio     
mask = imageio.imread('china.jpg')      #将背景设为中国地图形状,图片需读者自备,否则会出现错误
#1.读取三国这本小说
#使用with 上下文管理器进行本地文件读取
with open('./threekingdom.txt', 'r', encoding='utf-8') as f:    #这种方法省略了关闭流,第二种读取文件方式 ,比较常用 ,优点较明显
    words = f.read()
    print(words)
#2.对小说字符串进行分词
word_list = jieba.lcut(words)    #第一天学习内容
print(word_list)
# 把返回的分析列表转换成字符串
word_text = ' '.join(word_list)    #第一天学习内容
print(word_text)
#3.使用wordcloud进行绘制
WordCloud(
    background_color='grey',      #背景颜色
    width=800,                           
    height=600,
    font_path='MSYH.TTC',         #字体,要用的字体要导入当前文件夹,需自备
    mask=mask,                    #背景形状
).generate(word_text).to_file('三国词云.png')    #png图片格式
  1. 升级,三国人物出场次数Top10绘制词云
    案例代码
import jieba     #引入jieba库 ,第一天学习到的知识,可以去前一篇看
from wordcloud import WordCloud
import imageio
mask = imageio.imread('china.jpg')
# 1.读取三国这本小说
with open('./三国.txt', 'r', encoding='utf-8') as f:    # 这种方法省略了关闭流
    words = f.read()
    word_list = jieba.lcut(words)
    # 定义一个集合,为了将与人物无关的词剔除
    excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",
                "如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",
                "东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",
                '孔明曰','玄德曰','刘备', '云长'}
    # print(word_list)
    print(len(word_list))
    # 定义一个字典{'人名':'出现次数'}
    counts = {}

    for word in word_list:
        if len(word) == 1:
            continue
        else:
            # 往字典里添元素
            counts[word] = counts.get(word, 0) + 1     #第一天学习到的内容
    # print(counts)
    #将意思相同的人物合并
    counts['孔明'] = counts['孔明'] + counts['孔明曰']
    counts['刘备'] = counts['刘备'] + counts['玄德曰'] + counts['玄德']
    counts['关羽'] = counts['云长'] + counts['关羽']
    # 删除无关的信息
    for word in excludes:
        del counts[word]
    # 将count转化成列表
    items = list(counts.items())
    # print(items)      #这里用到了sorted()和lambda()俩函数,下面会讲到,我这里是用之前的排序函数写的   ,学到后面的内容后将这里改进了  下面这个是现在知识解决的,两种方法使用一个
    #def items_by_list(x):
    #    return x[1]
    #items.sort(key=items_by_list, reverse=True)
    #print(items)

    items = sorted(items, key=lambda x: x[1], reverse=True)  # 倒叙reverse=True
    print(items)
    # 显示  计数前10的词语
    role_list = []
    for i in range(10):
        # 拆包    序列解包
        # print(items[i])
        role_name, count = items[i]
        print(role_name, count)

        # _是给读者看的  表示并没有使用临时变量
        for _ in range(count):
            role_list.append(role_name)
    # print(role_list)
    text = ' '.join(role_list)
    WordCloud(
        background_color='white',
        width=800,
        height=600,
        font_path='MSYH.TTC',
        collocations=False,     #将每个词语出现两次关闭
        mask=mask,
    ).generate(text).to_file('top10.png')

函数和lambda表达式

函数格式
def 函数名():
内容pass #占位
函数名() #函数必须得调用才有效

def 函数名():

    pass             #占位

函数名()               #函数必须得调用才有效

案例代码

#1~num  之间累加和
def caculate_num(num):
    result = 0
    for i in range(num+1):
        result += i
    return result

sum_num = caculate_num(100)
print(sum_num)

函数和方法的区别:没区别
函数是针对于面向过程
方法是面向对象

lambda匿名函数
格式:lambda 参数1,参数2,。。。:表达式
避免重名 , 不能反复调用
案例代码

pingfang = lambda n: n*n
print(pingfang(2))
add = lambda x, y: x+y
print(add(4, 3))

案例代码

stu_info = [
    {'name': 'zhangsan', 'age': 33},
    {'name': 'lisi', 'age': 8},
    {'name': 'wangwu', 'age': 66},
    {'name': 'tianqi', 'age': 17},
]
print(stu_info[2])
stu_info.sort(key=lambda x: x['age'])
print('排序后', stu_info)

排序两种方式

stu_info1 = [
  ('zhangsan', 89),
  ('lisi', 7),
  ('wangwu ', 222),
  ('zhaoliu', 44)
]
stu_info1.sort(key=lambda x: x[1])             #.sort()函数排序
print(stu_info1)

stu_info1 = sorted(stu_info1, key=lambda x: x[1])     # sorted()函数排序
print(stu_info1)
# .sort()和sorted() 的区别
# 1.  .sort()是列表特有的方法。sorted()是适用于任何可迭代对象
# 2.  .sort()是在原来列表上进行修改    sorted()是返回一个新的列表
# 3.调用形式不一样

列表推导式

#生成一个列表[0.1.2.....9]
li = []
for i in range(10):
    li.append(i)
print(li)
# 使用列表推导式
#语法  [表达式  for 临时变量 in 可迭代对象 条件]
li2 = [i for i in range(10)]
print(li2)
li = []
for i in range(20):
    li.append(i)
print(li)
# 筛选出所有的偶数    得先遍历
new_li = []
for i in li:
    if i % 2 == 1:
        new_li.append(i)
print(new_li)
# 使用列表推导式
li3 = [i for i in range(20) if i%2==0]
print(li3)
# 生成正负随机的列表
from random import randint
li5 = []
for _ in range(10):
    li5.append(randint(-20, 20))
print(li5)
#用列表推导式表示
li5 = [randint(-20, 20) for _ in range(10)]
print(li5)
#删选所有的大于0的
li6 = [i for i in li5 if i > 0]
print(li6)

用三个案例来解读列表推导式 ,可在其中摸索关系。

Python的可视化表示

切片
python中特色, 列表和字符串可切片,左闭右开
案例代码

name = 'abcdefg'
#左闭右开
print(name[0:3])
print(name[0:8:2])
print(name[::2])# 起始值中止值可以省略
print(name[:])
print(name[::-1])   # name进行反转  gfedcba
print(name[-2::-2])# abcdefg   往前查是g是从-1往前查   往后查a是从0开始查

字符串输出

i = 2
grade = '十五'
print('这是我们上课的第{}天,我是第{}名'.format(i, grade))
对分析的数据进行可视化表示
# 导入库
# as 起别名
# 名字来源于MATLAB
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei']      #这句和下句是导入字体 按格式写就行
plt.rcParams['axes.unicode_minus'] = False
# 绘制条形图
import string
print(string.ascii_uppercase)       #大写字母从A-Z
x = ["厂商{}".format(i) for i in string.ascii_uppercase[:5]]
print(x)
from random import randint
y = [randint(200, 300) for _ in range(5)]
print(y)
# 绘制条形图
plt.bar(x, y)
plt.show()

内容很丰富,很简单,很基础。但是对于新人来说,也是种巨大的挑战,想要学好一门语言并不是一种容易的事。失败并不可怕,可怕的是我本可以。加油!

你可能感兴趣的:(python学习的第二天)