Python基础核心概念

1 变量和简单数据类型

变量命名格式:变量名 = “赋值”

1.1 变量使用规范

使用变量时,需要遵守一些规则。违反这些规则将引发错误。

~变量名只能包含数字、字母、下划线。变量名不能以数字开头以及不能包含空格。

~变量名不能将Python保留字和函数名作为变量名。如print等

如下是python3的33个保留字列表:

~变量名要简单又具有描述性。如name比n好,user_name比u_n好。

~慎用大写字母I和O,避免看错成数字1和0。

1.2 字符串

字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中引号包括单引号和双引号。这种灵活性能够在字符串中包含引号和撇号,如:

1\>>> str = "I'm David" 2>>> str1 = 'I told my friend,"i love Python"'

常用字符串操作方法

以首字母大写的方式显示每个单词:

1\>>> name = "hello python world" 2\>>> print(name.title()) 3Hello Python World

 将字符串改为全部大写或全部小写:

1\>>> str1 = "I love python" 2>>> print(str1.upper()) #将字符串改为全部大写 3I LOVE PYTHON \>>> print(str1.lower()) #将字符串改为全部小写 4i love python

 字符串合拼(拼接)

Python使用加号(+)来合拼字符串,如:

1\>>> first\_name = "Guido" 2>>> last\_name = "van Rossum" 3>>> full\_name = first\_name + " " + last\_name \>>> print(full\_name) 4Guido van Rossum

使用制表符\t或换行符\n添加空白:

1\>>> print("Languages:\\n\\tPython\\n\\tC++\\n\\tPHP") 2Languages: 3 Python 4 C++ PHP

 删除字符串的空格:

1\>>> name = " p y t h o n " 2>>> print(name.rstrip()) #删除字符串右端空格 3 p y t h o n \>>> print(name.lstrip()) #删除字符串左端空格 4p y t h o n \>>> print(name.strip()) #删除字符串两端空格 5p y t h o n \>>> print(name.replace(' ','')) #删除字符串全部空格包括制表符和换行符 6python

 字符串的序号

 字符串是字符的序列,可以按照单个字符或字符片段进行索引。

1\>>> name = "Hello World" 2>>> print(name\[0\]) 3H \>>> print(name\[0:-1\]) 4Hello Worl \>>> print(name\[-1\]) 5d \>>> print(name\[::\]) 6Hello World \>>> print(name\[0:11\]) 7Hello World

 找到字符串中最低字符索引号:S.find(sub [,start [,end]]) -> int  

失败时返回-1

1\>>> name = "hello world" 2>>> print(name.find('d')) 10

返回某些字符出现的次数:S.count(sub[, start[, end]]) -> int

1\>>> name = "hello world" 2>>> print(name.count('l')) 3

 把字符串由分隔符返回一个列表:S.split([sep [,maxsplit]]) -> list of strings,如果给定maxsplit,则最多为maxsplit

1\>>> name = "hello world" 2>>> print(name.split(' ')) 3\['hello', 'world'\] 4\>>> print(name.split(' ',0)) 5\['hello world'\]

 字符串格式化输出(format和%用法)

%方法格式代码

1\>>> "{}:计算机{}的CPU占用率为{}%".format('2019-03-25','python',10) #S.format(\*args, \*\*kwargs) -> string 2'2019-03-25:计算机python的CPU占用率为10%' 3\>>> "%s:计算机%s的CPU占用率为%d%%" % ('2019-03-25','python',10) #%用法 4'2019-03-25:计算机python的CPU占用率为10%

小结:可以用help函数查看字符串的相关操作,比如help(str.find)

2 组合数据类型

2.1 集合类型

集合的定义及操作

~集合用大括号{}表示,元素间用逗号分隔;

~建立集合类型用{}或set();

~建立空集合类型,必须用set();

~集合元素之间无序;

~集合中每个元素唯一,不存在相同元素

1\>>> A = {"python",'666',("wenwei-blog",666)} 2{'python', '666', ('wenwei-blog', 666)} \>>> B = set("pypy") 3{'y', 'p'} \>>> C = {"python",123,"python",123} 4{'python', 123}

集合操作符

6个操作符

4个增强操作符

集合操作方法

集合应用场景

包含关系比较;数据去重。

2.1 序列类型定义

~序列是具有先后关系的一组元素

~序列是一个基类类型(基本数据类型)

~序列类型分为字符串、列表、元组类型

2.2 序列类型之列表

列表由一系列按特定顺序排列的元素组成,用方括号[]来表示列表。

列表的增删改查相关操作

<table border="2" align="left"><tbody><tr style="background-color: rgba(17, 211, 238, 1)"><td align="left"><p><span style="font-size: 13px">函数或方法</span></p></td><td align="left"><p><span style="font-size: 13px">描述</span></p></td><td align="left"><p><span style="font-size: 13px">实例</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L[i]=x</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;替换列表L第i数据项为x</span></p></td><td align="left"><p><span style="font-size: 13px">&gt;&gt;&gt; L = ['Python','PHP','JavaScript','C++']</span></p><p><span style="font-size: 13px">&gt;&gt;&gt; L[1] = 'Java'</span></p><p><span style="font-size: 13px">&gt;&gt;&gt; L</span></p><p><span style="font-size: 13px">['Python', 'Java', 'JavaScript', 'C++']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L[i:j]=L1</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;用列表L1替换列表L中第i到j项数据</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['Python', 'Java', 'JavaScript', 'C++']<br>&gt;&gt;&gt; L1 = ['C','Go']<br>&gt;&gt;&gt; L[0:2]=L1<br>&gt;&gt;&gt; L<br>['C', 'Go', 'JavaScript', 'C++']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;del L[i:j:k]<br></span></p></td><td align="left"><p><span style="font-size: 13px">删除列表L第i到第j项以k为步数的数据<br></span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['C', 'Go', 'JavaScript', 'C++', 'Java', 'C#', 'Ruby', 'Lua']<br>&gt;&gt;&gt; del L[1:6:2]<br>&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L+=L1或L.extend(L1)</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;将列表L1元素增加到列表L中</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L;L1</span></p><p><span style="font-size: 13px">['C', 'JavaScript', 'Java', 'Ruby', 'Lua']<br>['C', 'Go']<br>&gt;&gt;&gt; L+=L1<br>&gt;&gt;&gt; L;L1<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go']<br>['C', 'Go']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L*=n</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;将L列表的元素重复n次</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L1*=2<br>&gt;&gt;&gt; L1<br>['C', 'Go', 'C', 'Go']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L.append(x)</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;在L列表最好添加元素x</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go']<br>&gt;&gt;&gt; L.append('Python')<br>&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L.clear()</span></p></td><td align="left"><p><span style="font-size: 13px">删除列表L的所有元素</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>&gt;&gt;&gt; L.clear()<br>&gt;&gt;&gt; L<br>[]</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">&nbsp;L1 = L.copy()<br></span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;复制L列表生成新的L1列表</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>&gt;&gt;&gt; L1 = L.copy()<br>&gt;&gt;&gt; L1<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">L.insert(i,x)</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;在列表L的第i位置增加元素x</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>&gt;&gt;&gt; L.insert(2,'PHP');L<br>['C', 'JavaScript', 'PHP', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">L.pop(i)</span></p></td><td align="left"><p><span style="font-size: 13px">将列表L中的第i项元素删除</span></p></td><td align="left"><p><span style="font-size: 13px">&gt;&gt;&gt; L;L.pop(2);<br>['C', 'JavaScript', 'PHP', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>'PHP'<br>&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br></span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">L.remove(x)</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;将列表的第一个x元素删除</span></p></td><td align="left"><p><span style="font-size: 13px">&nbsp;&gt;&gt;&gt; L<br>['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>&gt;&gt;&gt; L.remove('C')<br>&gt;&gt;&gt; L<br>['JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>&gt;&gt;&gt;</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">L.reverse(x)</span></p></td><td align="left"><p><span style="font-size: 13px">将列表L中的元素反转</span></p></td><td align="left"><p><span style="font-size: 13px">&gt;&gt;&gt; L;L.reverse();L<br>['JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python']<br>['Python', 'Go', 'C', 'Lua', 'Ruby', 'Java', 'JavaScript']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">L.sort()</span></p></td><td align="left"><p><span style="font-size: 13px">将列表L的元素按首字母顺序排序</span></p></td><td align="left"><p><span style="font-size: 13px">&gt;&gt;&gt; L.sort()<br>&gt;&gt;&gt; L<br>['C', 'Go', 'Java', 'JavaScript', 'Lua', 'Python', 'Ruby']</span></p></td></tr><tr><td align="left"><p><span style="font-size: 13px">L.index(x)</span></p></td><td align="left"><p><span style="font-size: 13px">获取列表L的x元素的索引号</span></p></td><td align="left"><p><span style="font-size: 13px">&gt;&gt;&gt; L.index('Python')<br>5<br>&gt;&gt;&gt; L<br>['C', 'Go', 'Java', 'JavaScript', 'Lua', 'Python', 'Ruby']</span></p></td></tr></tbody></table>

对列表数字执行简单统计计算

1\>>> digits = \[1,23,434,55,44,67\] \>>> min(digits) 1 2>>> max(digits) 434 3>>> sum(digits) 624

列表相关练习

练习1:创建一个列表,其中包含数字1-100并打印出来然后计算列表数字的总值。

\>>> digits = \[value for value in range(1,101)\];sum(digits) 5050

练习2:求1-20的奇数

1\>>> for i in range(1,21,2): print(i) 1 23 35 47 59 611 713 815 917 1019

 练习3: 输出3-30以内能被3整除的数字

1\>>> lists = \[n for n in range(3,31)\] \>>> lists 2\[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30\] \>>> for i in lists: if i % 3 == 0: print(i) 3 36 49 512 615 718 821 924 1027 1130

2.3 序列类型之元组

元组其实跟列表差不多,也是存一组数据,只不过它一旦创建便不能修改,所以又叫只读列表

它只有两个方法,一个是count(统计元组某个元素出现的次数tuple.count('str')),一个是index(查看某个元素的索引号tuple.index('str'))

1\>>> names = ('zhiwenwei','zhouyouxian') \>>> names.index('zhiwenwei') 20 \>>> names.count('zhiwenwei') 1

元组练习题

有如下变量,请实现要求的功能

tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])

a. 请问tu变量中的第一个元素 “alex” 是否可被修改?

  元组不可直接被修改,需要转换成列表或字典

b. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

  k2是字典的键,对应的值是列表可修改:tu[1][2]['k2']='Seven'

c. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

  k3是字典的键,对应的值是元组不可修改

2.4 字典类型

字典是包含0个或多个键值对的集合,没有长度限制,可以根据键索引值的内容。

Python语言中通过字典实现映射,通过大括号{}建立,建立模型如下:

{键1:值1,键2:值2,...}

1\>>> city = {'中国':'北京','美国':'纽约','法国':'巴黎'} \>>> city 2{'中国': '北京', '美国': '纽约', '法国': '巴黎'}

拓展:字典是无序的。python语言中,字符串、列表、元组都是采用数字索引,字典采用字符索引。

字典的函数和方法

字典的基本原则

字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息

字典中的元素以键信息为索引访问

字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。

2.5 jieba库基本介绍

jieba库提供三种分词模式,最简单只需要掌握一个函数;

jieba是优秀的中文分词第三方库,需额外安装

jieba库的安装方法

pip install jieba

jieba分词的三种模式

精确模式:把文本精确切分,不存冗余单词

1\>>> word1 = jieba.lcut("python无所不能!除了生不出孩子,我们应该学习使用它!") 2Building prefix dict from the default dictionary ... 3Dumping model to file cache /tmp/jieba.cache 4Loading model cost 1.832 seconds. 5Prefix dict has been built succesfully. \>>> print(word1,type(word1)) 6\['python', '无所不能', '!', '除了', '生不出', '孩子', ',', '我们', '应该', '学习', '使用', '它', '!'\] <class 'list'\>

2.6 实例:文本词频统计

英文文本:hamlet,统计出现最多的英文单词

https://python123.io/resources/pye/hamlet.txt

代码实现:

1#Hamlet词频统计 2def getText(): 3 txt \= open("hamlet",'r').read() 4 txt \= txt.lower() #大写字母转换小写 5 for word in '~!@#$%^&\*()\_+-={}\[\],./:";<>?': 6 txt \= txt.replace(word," ")#把多余符号转换为空格 7 return txt 8hamletTxt \= getText() 9words \= hamletTxt.split() #以空格拆分为列表 10counts = {} for word in words: 11 counts\[word\] \= counts.get(word,0) + 1 #以每个词为键,值默认0,每出现一次累加1 12items = list(counts.items()) 13items.sort(key\=lambda x:x\[1\],reverse=True) #\[1\]按照第二维排序,reverse=True表示降序 14for i in range(10): 15 word,count \= items\[i\] print("{0:<10}{1:5}".format(word,count))

中文文本:三国,分析人物

https://python123.io/resources/pye/threekingdoms.txt

1import jieba 2txt \= open("Threekingdoms", 'r', encoding="utf-8").read() 3excludes \= {'将军','却说','荆州','二人','不可','不能','如此'} 4words \= jieba.lcut(txt) 5counts \= {} for word in words: if len(word) == 1: continue 6 #书中同一人物多个名字统一改为一个名字 7 elif word == '诸葛亮' or word == '空明日': 8 rword \= "孔明" 9 elif word == '关公' or word == '云长': 10 rword \= "关羽" 11 elif word == '玄德' or word == '玄德日': 12 rword \= "刘备" 13 elif word == '孟德' or word == '丞相': 14 rword \= "曹操" 15 else: 16 rword \= word 17 counts\[word\] \= counts.get(word, 0) + 1 18for word in excludes: del counts\[word\] #去重 19items = list(counts.items()) 20items.sort(key\=lambda x:x\[1\],reverse=True) for i in range(10): 21 word,count \= items\[i\] print("{0:<10}{1:>5}".format(word,count))

3 程序的控制结构

3.1 程序的分支结构

根据判断条件结果而选择不同向前路径的运行方式

单分支结构

if <条件> :

<语句块>

示例:

guess = eval(input("请输入数字:")) if guess == 88: print("猜对了")

二分支结构

if <条件> :

<语句块>

else:

<语句块>

guess = eval(input("请输入数字:")) if guess == 88: print("猜对了") else: print("猜错了")

多分支结构

if <条件1> :

<语句块1>

elif <条件2> :

<语句块2>

...

else:

<语句块N>

示例

1age = 25 count \= 0 while count < 3: 2 guess\_age \= int(input("guess\_age:")) if guess\_age == age: print("yes,you got it!!!") break 3 elif guess\_age > age: print("think smaller...") else: print("think bigger...") 4 count += 1

3.2 程序的循环结构

遍历循环

语法结构:

for <循环变量> in <循环结构>:

<语句块>

无限循环

由条件控制的循环运行方式

语法结构:

while <条件>:

<语句块>

循环控制保留字

break 和 continue

-break 跳出并结束当前整个循环,执行循环后的语句

-continue 结束当次循环,继续执行后续次数循环

循环的拓展

当循环没有被break语句退出时,执行else语句。

else语句作为“正常”完成循环的奖励

3.3 异常处理

异常处理的基本使用

示例

1try: 2 num \= eval(input("请输入数字")) print(num\*\*2) except: print("你输入的不是数字")

异常处理的高级使用

try:

语句块1

except:

语句块2

else:

语句块3(不发生异常时执行)

finally

语句块4(最终会执行)

3.4 实例:身体质量指数BMI

体质指数(BMI)= 体重(kg)÷ 身高²(m)

代码实例:

1height,weight = eval(input("请输入身体(米)和体重(公斤)\[逗号分开\]:")) 2bmi \= weight / pow(height,2) print("BMI数值为:{:.2f}".format(bmi))#.2f#保留两位小数 3who,nat = "","" 4if bmi < 18.5: 5 who,nat \= "偏瘦","偏瘦" 6elif 18.5 <= bmi < 24: 7 who,nat \= "正常","正常" 8elif 24 <= bmi < 25: 9 who,nat \= "正常","偏胖" 10elif 25 <= bmi < 28: 11 who,nat \= "偏胖","偏胖" 12elif 28 <= bmi <30: 13 who,nat \= "偏胖","肥胖" 14else: 15 who,nat \= "肥胖","肥胖" 16print("BMI指标为:国际'{}',国内'{}'".format(who,nat))

结果展示:

4 函数和代码复用

4.1 函数的定义和作用

def 函数名(o个或多个参数):

函数体

return 返回值

-函数是一段代码的表示

-函数是一段具有特定功能的、可重用的语句组

-函数是一种功能的抽象,一般函数表达特定功能

两个作用:降低编程难度和代码重用

函数的调用

4.2 函数的参数传递

可选参数传递

函数定义时可以为某些参数定义默认值,构成可选参数。

1def test(n,m=1): #m为可选参数 2 s = 1 3 for i in range(1,n+1): 4 s \*= i print(s//m) 5test(10) 6test(10,2)

结果:

可变参数传递

1def test(n,\*args):#args为可变参数,也可以命名其他值 2 s = 1 3 for i in range(1,n+1): 4 s += i for item in args: 5 s += item print(s) 6test(10,3) 7test(10,3,1,5)

函数执行结果:

参数组合:*args和**kwargs

1def test(\*args,\*\*kwargs): print("args =",args) print("kwargs =",kwargs) print("\----------------------------------") if \_\_name\_\_ == '\_\_main\_\_': 2 test(1,5,94,564) 3 test(a\=1,b=2,c=3) 4 test(1,2,3,4,a=1,b=2,c=3) 5 test('I love python',1,None,a=1,b=2,c=3)

函数执行结果:

参数传递的两种方式:位置传递和名称传递

 

 小结:

函数可以有参数也可以没有,但必须保持括号。*args是可变参数,args接收的是一个tuple**kw是关键字参数,kw接收的是一个dict。在同时使用*args和**kwargs时,必须*args参数列要在**kwargs前面。

4.3 lambda函数

lambda函数是一种匿名函数,即没有名字的函数;lambda函数用于定义简单的、能够在一行内表示的函数。

g = lambda x,y:x\*y print(g(4,5))

6 文件和数据格式化

5.1 文件的使用

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

常用语法格式

变量名 = open(文件路径(相对或绝对路径),打开模式,encoding=None)

打开模式

<table style="height: 254px; width: 567px" border="2"><tbody><tr><td><strong><span style="color: rgba(0, 0, 0, 1)">打开的文件模式</span></strong></td><td><strong><span style="color: rgba(0, 0, 0, 1)">描述</span></strong></td></tr><tr><td>&nbsp;‘r’</td><td>只读模式,默认值,文件不存在返回FileNotFoundError&nbsp;</td></tr><tr><td>&nbsp;‘w’</td><td>&nbsp;覆盖写模式,文件不存在则创建,存在则完全覆盖</td></tr><tr><td>&nbsp;‘x’</td><td>&nbsp;创建写模式,文件不存在则创建,存在则返回FileExistsError</td></tr><tr><td>&nbsp;‘a’</td><td>&nbsp;追加写模式,文件不存在则创建,存在则在文件最后追加内容</td></tr><tr><td>&nbsp;‘b’</td><td>&nbsp;二进制文件模式</td></tr><tr><td>&nbsp;‘t’</td><td>&nbsp;文本文件模式,默认值</td></tr><tr><td>&nbsp;'+'</td><td>&nbsp;与r/w/x/a一同使用,在原功能基础上增加同时读写功能</td></tr></tbody></table>

file对象

file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数

<table style="height: 228px; width: 790px" border="2"><tbody><tr><td><strong>file对象</strong></td><td><strong>描述</strong></td></tr><tr><td>f.read(size)</td><td>读入全部内容,如果给出参数,读入前size长度</td></tr><tr><td>f.readline()</td><td>&nbsp;读取整行,包括 "\n" 字符。</td></tr><tr><td>f.readlines(sizeint)</td><td>&nbsp;读取所有行并返回列表,若给定sizeint&gt;0,则是设置一次读多少字节,这是为了减轻读取压力。</td></tr><tr><td>f.write(s)</td><td>&nbsp;将字符串或字节流写入文件</td></tr><tr><td>f.writelines(lines)</td><td>&nbsp;将元素全为字符串的列表写入文件</td></tr><tr><td>f.close()</td><td>&nbsp;关闭文件</td></tr><tr><td>f.seed(offset)</td><td>&nbsp;调整当前文件操作指针的位置,0-文件开头;1-文件当前位置;2-文件末尾位置</td></tr><tr><td>&nbsp;f.flush()</td><td>&nbsp;刷新文件内部缓冲,数据立刻写入文件</td></tr></tbody></table>

5.2 wordcloud库的使用

 词云以词语为基本单位,更加直观和艺术第展示文件。

wordcloud库官网:https://amueller.github.io/word_cloud/

github地址:https://github.com/amueller/word_cloud

wordcloud下载安装

pip install wordcloud

wordcloud常规方法

w = wordcloud.WordCloud()

<table style="height: 146px; width: 749px" border="4"><tbody><tr><td><strong>方法</strong></td><td><strong>描述</strong></td><td><strong>例子</strong></td></tr><tr><td>w.generate(text)</td><td>向wordcloud对象w加载文本text</td><td>&nbsp;<pre>w.generate("Python by WordCloud")</pre></td></tr><tr><td>w.to_file(filename)</td><td>&nbsp;将词云输出.png或.jpg图像文件</td><td>&nbsp;<pre>w.to_file("outfile.png") </pre></td></tr></tbody></table>

 实例

1import wordcloud 2w \= wordcloud.WordCloud() #设置wordcloud对象 3w.generate("Python by WordCloud,is fun and powerful!") #配置对象参数并加载词云文本 4w.to\_file("outfile.png") #输出词云文件

执行生成图片:

程序执行过程报错:ModuleNotFoundError: No module named 'matplotlib'

解决报错:安装python画图工具第三方库matplotlib:pip install matplotlib

wordcloud工作流程

      1. 分割:以空格分割单词
      2. 统计:单词出现次数并过滤
      3. 字体:根据统计配置字号
      4. 布局:颜色环境尺寸

配置对象参数

w.wordcloud.WordCloud(<参数>)

<table style="height: 523px; width: 982px" border="6"><tbody><tr><td><strong>参数</strong></td><td><strong>描述</strong></td><td><strong>例子</strong></td></tr><tr><td>&nbsp;width</td><td>&nbsp;指定生成图片宽度,默认400像素</td><td>&nbsp;<pre>width=500</pre></td></tr><tr><td>&nbsp;height</td><td>&nbsp;指定生成图片高度,默认200像素</td><td><pre>height=300</pre></td></tr><tr><td>&nbsp;min_font_size</td><td>&nbsp;指定词云字体最小字号,默认4号</td><td>&nbsp;<pre>min_font_size=20</pre></td></tr><tr><td>&nbsp;max_font_size</td><td>&nbsp;指定词云字体最大字号,根据高度自动调节</td><td>&nbsp;<pre>max_font_size=40</pre></td></tr><tr><td>&nbsp;font_step</td><td>&nbsp;指定词云单词步进间隔,默认1</td><td>&nbsp;<pre>font_step=6</pre></td></tr><tr><td>&nbsp;font_path</td><td>&nbsp;指定文件字体的路径,默认None</td><td>&nbsp;font_path="msyh.ttc"</td></tr><tr><td>&nbsp;max_words</td><td>&nbsp;指定词云显示最多单词数量,默认200</td><td>&nbsp;<pre>max_words=5</pre></td></tr><tr><td>&nbsp;stopwords</td><td>&nbsp;指定词云排除列表,即不显示的单词列表</td><td>&nbsp;stopwords={"python"}</td></tr><tr><td>&nbsp;mask</td><td>&nbsp;指定词云形状,默认长方形,修改需应用imread函数</td><td><p>&nbsp;from scripy.misc import imread</p><p>mk=imread("pic.png")</p><p>mask=mk</p></td></tr><tr><td>&nbsp;background_color</td><td>&nbsp;指定词云图片背景颜色,默认黑色</td><td><pre>background_color="white"</pre></td></tr></tbody></table>

实例1

1import wordcloud 2w \= wordcloud.WordCloud() 3text \= "life is short, you need python" w \= wordcloud.WordCloud(background\_color="white",width=500,height=300, 4 min\_font\_size\=20,max\_font\_size=40,font\_step=6, 5 max\_words\=5) 6w.generate(text) 7w.to\_file("outfile2.png")

 实例2

1import wordcloud import jieba 2text \= """ wordcloud是python非常优秀的第三方库,词云以词语为基本单位更加直观和艺术的展示文本词云图,\\ 3也叫文字云,是对文本中出现频率较高的关键词予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,\\ 4使得浏览者只要一眼扫过文本就可领略文本的主旨。基于Python的词云生成类库,好用功能强大。\\ 5在做统计分析的时候有着很好的应用。 """ w \= wordcloud.WordCloud(width=800,height=400,font\_path="msyh.ttc") 6w.generate(" ".join(jieba.lcut(text))) #中文需要先分词并组成空格分隔字符串 7w.to\_file("outfile3.png")

 实例3

常规图词云

https://python123.io/resources/pye/新时代中国特色社会主义.txt

1import wordcloud import jieba 2f \= open("新时代中国特色社会主义","r",encoding="utf-8") 3text \= jieba.lcut(f.read()) 4text \= " ".join(text) 5f.close() 6w \= wordcloud.WordCloud(background\_color='white',width=800,height=400,font\_path="msyh.ttc") 7w.generate(text) 8w.to\_file("outfile4.png")

实例4

不常规图词云:生成下图五角星形状

1import wordcloud import jieba from scipy.misc import imread #图片必须是白色背景色 2mask = imread('five-pointed star.png') 3f \= open("新时代中国特色社会主义","r",encoding="utf-8") 4text \= jieba.lcut(f.read()) 5text \= " ".join(text) 6f.close() 7w \= wordcloud.WordCloud(background\_color='white',width=1000,height=700,font\_path="msyh.ttc",mask=mask) 8w.generate(text) 9w.to\_file("outfile5.png")

 效果

 

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''