文章目录
第7章 文件和数据格式化
文件的使用
文件的类型
文件展示形式:文本文件和二进制文件
文件是数据存储的一种形式
本质上,所有文件都是二进制形式存储
形式上,所有文件采用两种方式展示
文本文件
有单一特定编码组成的文件,如utf-8编码
适用于:.txt文件和.py文件等
被看成存储着的长字符串
二进制文件
由0和1组成,没有统一字符编码
文件的打开和关闭
打开
# 文本形式打开文件
tf = open("F.txt", "rt")
print(tf.readline())
tf.close()
# 二进制形式打开文件
tf = open("F.txt", "rb")
print(tf.readline())
tf.close()
<变量名> = open(<文件名>,<打开模式>)
对于文件名,有绝对路径和相对路径两种,使用‘/’或‘\’
打开模式
关闭
<变量名>.close()
文件内容的读取
文件的全文本操作
# 遍历全文本:方法一
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
txt = fo.read()
# 对文本进行处理
fo.close()
# 一次读入,统一管理
# 遍历全文本:方法二
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
txt = fo.read(2)
while 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()
# 分行读入,逐行处理
数据的文件写入
数据的文件写入
实例11:自动轨迹绘制
数据和文件的分离耦合
步骤1:定义数据文件格式(接口)
步骤2:编写程序,根据文件接口解析参数绘制图形
步骤3:编制数据文件
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.seek(0)
for line in f:
print(line)
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])
t.done()
一维数据的格式化和处理
数据组织的维度
一维:由对等关系的有序或无序数据构成,采用线性的组合形式
二维:由多个一维数据构成,是一维数据的组合形式
多维:由一维或二维数据在新维度上扩展形成
一维数据的表示
如果数据间有序,使用列表类型
列表类型可以表达一维有序数据
如果数据间无序:使用集合类型
集合类型可以表达一维无序数据
一维数据的存储
存储方式一:空格分隔
使用一个或多个空格分隔进行存储,不换行
缺点数据中不能存在空格
存储方式二:逗号分隔
使用英文半角逗号分隔数据进行存储,不换行
缺点;数据中不能有英文
存储方式三:其他方式
使用其他符号或符号组合分隔,建议采用特殊符号
缺点:需要根据数据特点定义,通用性较差
一维数据的处理
读入
# 从空格分隔的文件中读入数据
txt = open("test.txt").read()
ls = txt.split(" ")
# 从特殊符号分隔的文件中读入数据
txt = open("test.txt").read()
ls = txt.split("$")
写入
# 采用空格分隔方式将数据写入文件
ls = ["中国", "美国", "法国"]
f = open("test.txt", "w")
f.write(' '.join(ls))
f.close()
# 采用特殊分隔方式将数据写入文件
ls = ["中国", "美国", "法国"]
f = open("test.txt", "w")
f.write('$'.join(ls))
f.close()
二维数据的格式化和处理
二维数据的表示
- 利用列表方式表示:外层列表中每个元素可以对应一行,也可以对应一列
- csv方式存取
CSV数据存储格式
如果某个元素缺失,退号仍要保留
二维数据的表头可以作为数据存储,也可以另行存储
逗号为英文半角逗号,逗号与数据之间无额外空格
二维数据的存储
一般存储为先行后列
二维数据的处理
读入
# 从CSV格式的文件中读入数据
fo = open(fname)
ls = []
for item in fo:
item = item.replace("\n", '')
ls.append(item.split(","))
fo.close()
写入
# 将数据写入CSV格式的文件
ls = [[], [], []]
fo = open(fname, "w")
for item in ls:
fo.write(','.join(item) + '\n')
fo.close()
逐一处理
# 采用二层循环
ls = [[1, 2], [3, 4], [5, 6]]
for r in ls:
for c in r:
print(c)
模块6: wordcloud库的使用
wordcloud库把词云当作一个 Wordcloud对象
wordcloud. Wordcloud()代表一个文本对应的词云
可以根据文本中词语出现的频率等参数然制词云
词云的绘制形状、尺寸和色、字体都可以设定
- 配置对象参数
- 加载词云文本
- 输出词云文件
参数设置
应用实例
实例12:政府工作报告词云
# WordCloudCalThreeKingdomsV2.py
import jieba
import wordcloud
from imageio import imread
def WordCloudImage(items, x):
mask = imread("2.png")
w = wordcloud.WordCloud(font_path="FZXIANGLJW.TTF", width=1000, height=800, background_color="black",
max_words=x, font_step=1, mask=mask)
w.fit_words(items)
w.to_file("WaterMargin.png")
txt = open("水浒传.txt", "r", encoding="utf-8").read()
excludes = {"两个", "一个", "只见", "如何", "那里", "哥哥", "军马", "头领", "说道", "众人",
"这里", "兄弟", "出来", "小人", "今日", "这个", "梁山泊", "先锋", "好汉", "便是",
"妇人", "人马", "起来", "问道", "不得", "因此", "三个", "我们", "次日", "只是",
"不曾", "如此", "不知", "不是", "一面", "且说", "来到", "不敢", "却是", "看时",
"将军", "如今", "原来", "山寨", "正是", "喝道", "只得", "一齐", "兄长", "当下",
"知府", "大喜", "里面", "军士", "商议", "小弟", "天子", "性命"}
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "宋江道":
rword = "宋江"
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
for word in excludes:
del counts[word]
WordCloudImage(counts, 85)