第7章 文件和数据格式化

第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(<文件名>,<打开模式>)

对于文件名,有绝对路径和相对路径两种,使用‘/’或‘\’

打开模式

image-20211130135343709

关闭

<变量名>.close()

文件使用

文件内容的读取

image-20211130135818880

image-20211130140027909

文件的全文本操作
# 遍历全文本:方法一
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()
# 分行读入,逐行处理

数据的文件写入

数据的文件写入

image-20211130140740947

image-20211130140818339

实例11:自动轨迹绘制

数据和文件的分离耦合

步骤1:定义数据文件格式(接口)

步骤2:编写程序,根据文件接口解析参数绘制图形

步骤3:编制数据文件

image-20211130142328735

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

image-20211130145438161

一维数据的格式化和处理

数据组织的维度

一维:由对等关系的有序或无序数据构成,采用线性的组合形式

二维:由多个一维数据构成,是一维数据的组合形式

多维:由一维或二维数据在新维度上扩展形成

一维数据的表示

如果数据间有序,使用列表类型

列表类型可以表达一维有序数据

如果数据间无序:使用集合类型

集合类型可以表达一维无序数据

一维数据的存储

存储方式一:空格分隔
使用一个或多个空格分隔进行存储,不换行
缺点数据中不能存在空格

存储方式二:逗号分隔
使用英文半角逗号分隔数据进行存储,不换行
缺点;数据中不能有英文

存储方式三:其他方式
使用其他符号或符号组合分隔,建议采用特殊符号
缺点:需要根据数据特点定义,通用性较差

一维数据的处理

读入
# 从空格分隔的文件中读入数据
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()

二维数据的格式化和处理

二维数据的表示

  1. 利用列表方式表示:外层列表中每个元素可以对应一行,也可以对应一列
  2. 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()代表一个文本对应的词云
可以根据文本中词语出现的频率等参数然制词云
词云的绘制形状、尺寸和色、字体都可以设定

image-20211130154006789

  1. 配置对象参数
  2. 加载词云文本
  3. 输出词云文件

参数设置

image-20211130154409139

image-20211130154452794

image-20211130154544815

image-20211130154956387

应用实例

实例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)

img

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangpi_hero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值