Python 学习笔记(五)

文件的使用和词云

文件的使用

文本文件

由单一特定编码组成的文件,如 UTF-8 编码,如:.txt 文件、.py 文件等

二进制文件

直接由比特 0 和 1 组成,没有统一字符编码,如:.png 文件、.avi 文件等

文件的打开

1
<变量名> = open(<文件名>, <打开模式>)
打开模式
文件的打开模式 描述
‘r’ 只读模式,默认值,如果文件不存在,返回 FileNotFoundError
‘w’ 覆盖写模式,文件不存在则创建,存在则完全覆盖
‘x’ 创建写模式,文件不存在则创建,存在则返回 FileExistsError
‘a’ 追加写模式,文件不存在则创建,存在则在文件最后追加内容
‘b’ 二进制文件模式
‘t’ 文本文件模式,默认值
‘+’ 与 r/w/x/a 一同使用,在原功能基础上增加同时读写功能
1
2
3
4
5
6
7
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", "wb") # 二进制形式、覆盖写模式

文件的关闭

1
<变量名>.close()

文件的读取

操作方法 描述
f.read(size=-1) 读入全部内容,如果给出参数,读入前 size 长度
f.readline(size=-1) 读入一行内容,如果给出参数,读入该行前 size 长度
f.readlines(hint=-1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前 hint 行
1
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
# 遍历全文本:方法一,一次读入,统一处理
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
txt = fo.read()
# 对全文txt进行处理
fo.close()

# 遍历全文本:方法二,按数量读入,逐步处理
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
txt = fo.read(2)
while txt != "":
# 对txt进行处理
txt = fo.read(2)
fo.close()

# 逐行遍历文件:方法一,一次读入,分行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
for line in fo.readlines():
print(line)
fo.close()

# 逐行遍历文件:方法二,分行读入,逐行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
for line in fo:
print(line)
fo.close()

文件的写入

操作方法 描述
f.write(s) 向文件写入一个字符串或字节流
f.writelines(lines) 将一个元素全为字符串的列表写入文件
f.seek(offset) 改变当前文件操作指针的位置,offset 含义如下:
0 – 文件开头; 1 – 当前位置; 2 – 文件结尾
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 写入一个字符串列表
fo = open("output.txt", "w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
for line in fo:
print(line) # (没有任何输出)
fo.close()

fo = open("output.txt", "w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
print(line) # 中国法国美国
fo.close()

自动轨迹绘制示例

数据文件 data.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 行进距离,转向判断 0左转 1右转,转向角度,rgb颜色值
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,720,0,0,0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import turtle as t

t.title('自动轨迹绘制')
t.setup(800,600,0,0)
t.pencolor('red')
t.pensize(5)

datals = []
f = open('data.txt')
for line in f:
line = line.replace('\n','')
datals.append(list(map(eval,line.split(","))))
f.close()

for i in range(len(datals)):
t.pencolor(datals[i][3],datals[i][4],datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.right(datals[i][2])
else:
t.left(datals[i][2])

wordcloud 库

安装

1
pip3 install wordcloud

常规方法

1
w = wordcloud.WordCloud()
方法 描述
w.generate(txt) 向 WordCloud 对象 w 中加载文本 txt
w.to_file(filename) 将词云输出为图像文件,.png 或 .jpg 格式

配置参数

参数 描述
width 指定词云对象生成图片的宽度,默认 400 像素
height 指定词云对象生成图片的高度,默认 200 像素
min_font_size 指定词云中字体的最小字号,默认 4 号
max_font_size 指定词云中字体的最大字号,根据高度自动调节
font_step 指定词云中字体字号的步进间隔,默认为1
font_path 指定字体文件的路径,默认 None
max_words 指定词云显示的最大单词数量,默认200
stop_words 指定词云的排除词列表,即不显示的单词列表
mask 指定词云形状,默认为长方形,需要引用 imread() 函数
background_color 指定词云图片的背景颜色,默认为黑色
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import wordcloud

# 英文文本 以单词分隔单词
txt = "life is short, you need python"
w = wordcloud.WordCloud(background_color='white')
w.generate(txt)
w.to_file("pywcloud.png")

# 中文需要先分词并组成空格分隔字符串
txt = "程序设计语言是计算机能够理解和\
识别用户操作意图的一种交互体系,它按照\
特定规则组织计算机指令,使计算机能够自\
动进行各种运算处理。"

# 需要设置字体才能正常显示中文,下面的字体是 mac 下的
w = wordcloud.WordCloud(width=1000,
height=700,
font_path="/System/Library/fonts/PingFang.ttc")
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")

政府工作报告词云示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests
import wordcloud
import jieba
from scipy.misc import imread

r = requests.get("https://python123.io/resources/pye/新时代中国特色社会主义.txt")
txt = r.text
ls = jieba.lcut(txt)
txt = " ".join(ls)

#设置词云形状,5角星
mask = imread("fivestart.png")

# 需要设置字体才能正常显示中文,下面的字体是 mac 下的
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path="/System/Library/fonts/PingFang.ttc",
mask=mask)
w.generate(txt)
w.to_file("grwordcloud.png")