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()

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 开发一个APP要花多少钱? 曾经有个很火的段子,叫做“开发一个APP要花多少钱”。引一下西乔的漫画: OH!开发一...
    张东_7536阅读 606评论 0 0
  • 前几天在起点发了文 每天两三千字 居然要坚持不下来了 今天本应该再更新几千字的 结果一直拖延到现在也没动笔 有了智...
    可以爱你嘛阅读 339评论 0 2
  • 你想多了,北大林校长没有下野。他只是去了一趟云南。 5月17号,北京大学校长林建华做客西南联大讲坛,他说中国大学搞...
    记录者老路阅读 1,628评论 1 10
  • 文 | 阿鱼鱼_Ayuyu Chapter 03 |【周蒙】渭朴 渭朴是西南第一大城思相城下一个极其普通的县,...
    刘瑜_Demi阅读 224评论 0 1