MOOC《Python语言程序设计》(第15次)
文件和数据格式化(第七周)21.8.12
文章目录
单向选择题
1、二维列表ls=[[1,2,3], [4,5,6],[7,8,9]],哪个选项能获取其中元素5?
A、ls[-1][-1]
B、ls[4]
C、ls[1][1]
D、ls[-2][-1]
正确答案 C
这是二维切片的使用方式。
2、以下选项对文件描述错误的是:
A、文件是存储在辅助存储器上的数据序列
B、文件是数据的集合和抽象
C、文件是程序的集合和抽象
D、文件可以包含任何内容
正确答案 C
函数或类是程序的集合和抽象,文件不是。
3、给定列表ls = [1, 2, 3, “1”, “2”, “3”],其元素包含2种数据类型,哪个选项是列表ls的数据组织维度?
A、高维数据
B、二维数据
C、一维数据
D、多维数据
正确答案 C
列表元素如果都是列表,其可能表示二维数据,例如:[[1,2], [3,4], [5,6]]。
如果列表元素不都是的将列表,则它表示一维数据。
4、关于数据组织的维度,哪个选项的描述是错误的?
A、一维数据采用线性方式组织,对应于数学中的数组和集合等概念
B、二维数据采用表格方式组织,对应于数学中的矩阵
C、高维数据由键值对类型的数据构成,采用对象方式组织
D、数据组织存在维度,字典类型用于表示一维和二维数据
正确答案 D
字典用于表示高维数据,一般不用来表示一二维数据。
5、关于Python文件的‘+’打开模式,哪个选项的描述是正确的?
A、追加写模式
B、与r/w/a/x一同使用,在原功能基础上增加同时读写功能
C、覆盖写模式
D、只读模式
正确答案 B
'+'打开模式的精髓在于它能够同时赋予文件的读写权限。
6、以下选项不是Python文件读操作的是:
A、readlines()
B、readtext()
C、readline()
D、read()
正确答案 B
没有readtext()方法
7、对于Python文件,以下描述正确的是:
A、同一个文件可以既采用文本方式打开,也可以采用二进制方式打开
B、当文件以文本方式打开时,读取按照字节流方式
C、根据不同类型的文件,打开方式只能是文本或者二进制中的一种
D、当文件以二进制文件方式打开时,读取按照字符串方式
正确答案 A
文件就在那里,二进制或文本方式打开只是对其不同的程序理解。
8、关于文件关闭的close()方法,哪个选项的描述是正确的?
A、如果文件是只读方式打开,仅在这种情况下可以不用close()方法关闭文件
B、文件处理结束之后,一定要用close()方法关闭文件
C、文件处理遵循严格的“打开-操作-关闭”模式
D、文件处理后可以不用close()方法关闭文件,程序退出时会默认关闭
正确答案 D
打开文件后采用close()关闭文件是一个好习惯。如果不调用close(),当前Python程序完全运行退出时,该文件引用被释放,即程序退出时,相当于调用了close()。
9、关于CSV文件的描述,哪个选项的描述是错误的?
A、CSV文件通过多种编码表示字符
B、CSV文件的每一行是一维数据,可以使用Python中的列表类型表示
C、整个CSV文件是一个二维数据
D、CSV文件格式是一种通用的、相对简单的文件格式,应用于程序之间转移表格数据
正确答案 A
一般来说,CSV文件都是文本文件,由相同编码字符组成。
**10、Python对文件操作采用的统一步骤是:**
A、打开—读写—写入
B、打开—读取—写入—关闭
C、操作—读取—写入
D、打开—操作—关闭
正确答案 D
打开—操作—关闭 是一个统一步骤,其中,关闭可以省略。
程序设计题
文件的平均列数
# 文件的平均列数
'''
描述:
打印输出附件文件的平均列数,计算方法如下:
(1)有效行指包含至少一个字符的行,不计算空行;
(2)每行的列数为其有效字符数;
(3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。
'''
f = open("latex.log")
line = 0
row = 0
for item in f:
item = item.strip("\n") #以回车为分隔,代表一行
if len(item) == 0: #空行不计算
continue
else:
line += 1
row += len(item)
print(round(row/line))
f.close()
CSV格式清洗与转换
f=open("data.csv")
line=f.readlines()
line.reverse()
for i in line:
i=i.replace('\n','')
i=i.replace(' ','')
a=i.split(",")
a.reverse()
print(";".join(a))
f.close()
练习题
文件行数
# 文件行数
'''
描述:
打印输出附件文件的有效行数,注意:空行不计算为有效行数。
'''
f = open("latex.log")
count = 0
for i in f:
line = i.strip("\n") #以回车为分隔,代表一行
if len(line) == 0: #空行不计算
continue
else:
count = count+1
print("共{}行".format(count))
文件字符分布
# 文件字符分布
'''
描述:
统计附件文件的小写字母a-z的字符分布,即出现a-z字符的数量,并输出结果。
同时请输出文件一共包含的字符数量。
注意输出格式,各元素之间用英文逗号(,)分隔。
答案可能包含a-z共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序a-z顺序。
'''
f = open("latex.log")
count = 0
d = {}
for line in f: #遍历一行数据
for c in line: #遍历每个数据
d[c] = d.get(c, 0) + 1 #用字典get方法计算字母出现个数,当遇见空格或其它符号,返回0
count = count+1
print("共{}字符".format(count), end="") #打印总数
for i in range(26): #将字母转化为ASCII码并输出
print(",{}:{}".format(chr(ord('a')+i), d[chr(ord('a')+i)]), end="")
文件独特行数
# 文件独特行数
'''
描述:
统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。
'''
f = open("test.txt")
ls = f.readlines()
s = set(ls)
for i in s:
ls.remove(i)
t = set(ls)
print("共{}独特行".format(len(s)-len(t)))
# 独特行是指没有重复的一行
CSV格式列变换
# CSV格式列变换
'''
描述
附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。
'''
data = open("data.csv")
for i in data:
ls =i.replace('\n','')
m = ls.split(',')[::-1] #列表切片
print(','.join(m))
CSV格式数据清洗
# CSV格式数据清洗
'''
附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下:
(1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割;
(2)清洗后打印输出。
'''
f = open("data.csv")
s = f.read()
print(s.replace(" ",""))
f.close()
学习笔记
1、文件的使用
1.1 文件的类型
文本文件:
- 由单一特定编码组成的文件,如UTF-8编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于:txt文件、.py文件等
二进制文件:
- 直接由比特0和1组成,没有统一字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于例如:.png文件、.avi文件等
f.txt文件保存:“中国是个伟大的国家!”
文本形式:中国是个伟大的国家!
二进制形式:b’\xd6\xdo\xb9\xfa\xca\xc7\xb8\xf6\xce\xbo\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1’
1.2 文件的处理:
文件的打开:
<变量名> = open( <文件名>, <打开模式> )
- <变量名>:文件句柄;
- <文件名>:路径和名称,分绝对路径和相对路径;
- <打开模式>:文本或二进制;读或写。
文件的关闭:
<变量名>.close()
文件的打开模式 | 描述 |
---|---|
‘r’ | 只读模式,默认值,如果文件不存在,返回FileNotFoundError |
'w ’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值 |
‘+’ | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
文件内容的读取:
操作方法 | 描述 |
---|---|
.read(size-1) | 读入全部内容,如果给出参数,读入前size长度 >>> s= f.read(2) 中国 |
.readline(size-1) | 读入一行内容,如果给出参数,读入该行前size长度 >>>s = f.readline() 中国是一个伟大的国家! |
.readlines(hint=-1) | 读取文件所有行,以每行为元素形成列表,如果给出参数,读取前hint行 >>> s = f.readlings() [“中国是一个伟大的国家!”] |
# 遍历文本的方法
fo = open('China.txt' , "r")
# 方法一:一次读入,统一处理
txt_1 =fo.read() # 对全文txt进行处理
# 方法二:按数量读入,逐步处理
txt_2 = fo.read(2)
while txt_2 != '':
# 对 txt 进行处理
txt_2 = fo.read(2)
# 方法三:一次读入,分行处理
for line in fo.readlines():
print(line)
# 方法四:分行读入,逐行处理
for line in fo:
print(line)
fo.close()
数据的文件写入:
操作方法 | 描述 |
---|---|
.write(s) | 向文件写入一个字符串或字节流 f.write(“中国是一个伟大的国家!”) |
.writeline(lines) | 将一个元素全为字符串的列表写入文件 >>>1s = [“中国”,“法国”,“美国"] >>>f.writelines(ls) 中国法国美国 |
.seek(offset) | 改变当前文件操作指针的位置,offset含义如下:0一文件开头; 1一当前位置; 2-文件结尾>>>f.seek(0) # 回到文件开头 |
2、实例11:自动轨迹绘画
# AutoTraceDraw.py
'''
基本步骤:
步骤1:定义数据文件格式(接口)
步骤2:编写程序,根据文件接口解析参数绘制图形
步骤3:编制数据文件
数据格式:
例:300,1,144,0,1,0
行进距离,转向判断(0左1右),转向角度,RGB三通道颜色
'''
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])
3、一位数据的格式化和处理
3.1 一维数据的表示
- 如果时间有序,使用列表类型
- 如果数据无序,使用集合类型
3.2 一维数据的存储
- 方式一:空格分隔
使用一个或多个空格分隔,不换行
缺点:数据中不能存在空格。
- 方式二:逗号分隔
使用英文半角逗号分隔数据进行存储,不换行;
缺点:数据中不能有英文逗号。
- 方式三:其他符号
使用其他符号或符号组合分隔,建议采用特殊符号
缺点:需要根据数据特点定义,通用性较差
3.3 一维数据的处理
# 从空格分隔的文件中读入数据
txt = open("f_deal").read()
ls_1 = txt.split()
# 从特殊符号分隔的文件中读入数据
txt = open("f_deal").read()
ls_2 = txt.split("$")
# 采用空格分隔方式将数据写入文件
ls = ['中国','美国','日本']
f = open("f_deal.txt",'w')
f.write(''.join(ls))
f.close()
# 采用特殊分隔方式将数据写入文件
ls = ['中国','美国','日本']
f = open("f_deal.txt",'w')
f.write(''.join(ls))
f.close()
4、二维数据的格式化和处理
4.1 二维数据的表示
使用二维列表类型表达二维数据
– 使用两层for循环遍历每个元素
– 外层列表中每个元素对应一行/列
4.2 二维数据的存储
**CSV:**Comma-Separated Values
- 国际通用的一二维数据存储格式
- 每行一个一维数据,采用逗号分隔,无空行
- Excel和一般编辑软件都可以读入或另存为csv文件
- 如果某个元素缺失,逗号仍要保留
- 二维数据的表头可以作为数据存储,也可以另行存储
- 逗号为英文半角逗号,逗号与数据之间无额外空格
存储规范:
- 按行存或者按列存都可以,具体由程序决定
- 一般索引习惯:ls[ row ][column],先行后列
- 根据一般习惯,外层列表每个元素是一行,按行存
4.3 二维数据的处理
# 从 CSV 格式的文件中读入数据
fo = open("f_deal.txt")
ls_1 = []
for line in fo:
line = line.replace("\n","")
ls_1.append(line.split(","))
fo.close()
# 将数据写入 CSV 格式的文件
ls_2 = [['China','CN'],['American','USA'],['Japan','JPN']]
fw = open("f_deal.txt","w")
for item in ls_2:
fw.write(','.join(item)+'\n')
fw.close()
5、模块6:wordcloud库的使用
词云的含义:
以词语为基本单元,将词语通过图片可视化的方式,直观和艺术地展示出来。
wordcloud库的安装:
方式一:(cmd命令行)pip install wordcloud 即可。pycharm中在 Terminal 中输入。
方式二(pycharm):File -> settings -> Project Interpreter(点击右侧“+”号) -> 输入wordcloud,点击 Install Package 安装
wordcloud库的基本使用
w = wordcloud.WordCloud()
– 以WordCloud对象为基础
– 实现配置参数,加载文本,输出文件
常规方法:
方法 | 描述 |
---|---|
w.generate(txt) | 向WordCloud对象w中加载文本txt >>>w.generate( “Python and wordCloud” ) |
w.to_file(filename) | 将词云输出为图像文件,.png或.jpg格式 >>>w.to_fi1e( “outfile.png” ) |
# 常规方法:
import wordcloud
# 步骤1:配置对象参数
c = wordcloud.WordCloud()
# 步骤2:加载词云文本
c.generate("wordcloud by python")
# 步骤3:输出词云文件
c.to_file("pywordcloud.png")
配置对象参数
w = wordcloud.WordCloud(<参数>)
参数 | 描述 |
---|---|
width | 指定词云对象生成图片的宽度,默认400像素 >>>w=wordcloud.wordCloud(width=600) |
height | 指定词云对象生成图片的高度,默认200像素 >>>w=wordcloud.wordCloud( height=400) |
min_font_size | 指定词云中字体的最小字号,默认4号 >>>w=wordcloud.wordCloud(min_font_size=10) |
max_font _size | 指定词云中字体的最大字号,根据高度自动调节 >>>w=wordcloud.wordcloud(max_font_size=20) |
font_step | 指定词云中字体字号的步进间隔,默认为1 >>>w=wordcloud.wordCloud(font_step=2) |
font_path | 指定字体文件的路径,默认None >>>w=wordcloud.wordCloud(font_path=“msyh.ttc”) |
max_words | 指定词云显示的最大单词数量,默认200 >>>w=wordcloud.wordCloud(max_words=20) |
stop_words | 指定词云的排除词列表,即不显示的单词列表 >>>w=wordcloud.wordCloud(stop_words={ “Python”}) |
mask | 指定词云形状,默认为长方形,需要引用imread()函数 >>>from scipy.misc import imread >>>mk=imread( “pic.png”) >>>w=wordcloud.wordcloud(mask=mk) |
background_color | 指定词云图片的背景颜色,默认为黑色 >>>w=wordcloud.wordCloud(background_color=“white”) |
# 应用实例1:英文词云
import wordcloud
txt = "life is shorted, you need python"
w = wordcloud.WordCloud(
background_color = 'white')
w.generate(txt)
w.to_file("pywcloud.png")
# 应用实例2:中文词云
import jieba
import wordcloud
txt = "程序设计语言是计算机能够理解和" \
"识别用户操作意图的一种交互体系" \
"它按照\特定规则组织计算机指令" \
"使计算机能够自\动进行各种运算处理。"
w = wordcloud.WordCloud(width = 1000,
font_path="msyh.ttc",height=700)
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")
6、实例12:《目光》词云
# 原课程中是政府工作报告词云
import jieba
import wordcloud
from imageio import imread
diymask = imread(".\实例12:政府工作报告词云\五角星.png")
f = open(".\实例12:政府工作报告词云\目光.txt", encoding='UTF-8')
t = f.read()
f.close()
ls = jieba.lcut(t)
ls = [i for i in ls if len(i)>1] # 去除单个字以及各类字符
txt = " ".join(ls)
w = wordcloud.WordCloud(
font_path = "msyh.ttc", mask = diymask,width = 1000, height = 700,
background_color='white', max_words = 20,
stopwords={"这个","可以","我们",'他们','很多','什么','一个','没有','就是',"一些","所以",'他们','一种'}
)
w.generate(txt)
w.to_file("grwordcloud.png")
资料来源:
Python语言程序设计_北京理工大学_中国大学MOOC(慕课) https://www.icourse163.org/course/BIT-268001