dd一.文件的理解
文件时数据的抽象和集合
1.文件是储存在辅助储存器上的数据序列
2.文件是数据储存的一种形式
3.文件的展现形态:文本文件和二进制文件(文本文件和二进制文件只是文件的展示形式,本质上所有文件都是二进制形式储存)
文本文件
1.由单一特定编码组成的文件,如UTF-8编码
2.由于存在编码,也被看成是储存着的长字符串
3.适用于例如:.txt文件,.py文件
二进制文件
文件是数据的抽象和集合
1.直接由比特0和1组成,没有统一字符编码
2.一般存在二进制0和1的组织结构,即文件格式
3.适用于例如:.png文件,.avi文件
文件的打开关闭
a = open( , )
a.close()
a.read(size)
a.readline(size)
a.readlines(hint)
a.write(s)
a.writelines(lines)
a.seek(offset)
文件的打开
<变量名> = open(<文件名>, <打开模式>)
遍历全文本:方法一(一次读入,统一处理,如果特别大就不友好)
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-文件结尾
fo = open("output.txt", "w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
fo.seek(0)#写入ls之后将指针返回文件最开始的地方并从这开始进行全文的遍历
for line in fo:
print(line)
fo.close()
自动轨迹绘制
基本思路
1.定义数据文件格式(接口)
2.编写程序,根据文件接口解析参数绘制图形
3.编制数据文件
#AutoTraceDraw.py
import turtle as t
t.tilt('自动轨迹绘制')
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])
自动化思维:数据和功能分离,数据驱动的自动运行
接口化设计:格式化接口设计,清晰明了
二维数据应用:应用维度组织数据,二维数据最常用
扩展接口设计,增加更多控制接口
扩展功能设计,增加弧形等更多功能
扩展应用需求,发展自动轨迹绘制到动画绘制
一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表,数组和集合等
二维数据:由多个一维数据构成,是一维数据的组合形式,表格是典型的二维数据
多维数据:由一维或二维数据在新维度上扩展形成
txt = open(fname).read()
ls = txt.split()
f.close()
txt = open(fname).read()
ls = txt.split("$")
f.close()
ls = ['中国', '美国', '日本']
f = open(fname, 'w')
f.write(' '.join(ls))
f.close()
ls = ['中国', '美国', '日本']
f = open(fname, 'w')
f.write('$'.join(ls))
CSV格式的文件
#从CSV格式的文件中读入数据
fo = open(fname)
ls = []
for line in fo:
line = line.replace("\n", "")
ls.append(line.split(","))
fo.close()
# 将数据写入CSV格式的文件
ls = [[], [], []] #二维列表
f = open(fname, 'w')
for item in ls:
f.write(','.join(item) + '\n')
f.close()
二维数据的逐一处理
ls = [[1,2], [3,4], [5,6]] #二维列表
for row in ls:
for column in row:
print(column)
wordcloud库把词云当作一个WordCloud对象
wordcloud.WordCloud ()代表一个文本对应的词云
可以根据文本中词语出现的频率等参数绘制词云
绘制词云的形状,尺寸和颜色都可以设定
常规矩形词云
#GovRptWordCloudv1.py
import jieba
import wordcloud
f = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud( \
width = 1000, height = 700,\
background_color = "white",
font_path = "msyh.ttc"
)
w.generate(txt)
w.to_file("grwordcloud.png")
不规则图形词云
#GovRptWordCloudv2.py
import jieba
import wordcloud
from scipy.misc import imread
mask = imread("chinamap.jpg")
excludes = { }
f = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud(\
width = 1000, height = 700,\
background_color = "white",
font_path = "msyh.ttc", mask = mask
)
w.generate(txt)
w.to_file("grwordcloudm.png")