python语言程序设计(MOOC 嵩天)第七章 程序整理(0302)

第七章 文件和数据格式化

练习1 文件行数

打印输出附件文件的有效行数,空行不计算为有效行数。

f = open("latex.log")		#f是一个长列表
s = 0		#初始化变量s
for line in f:		#line是f中的一个元素,本质为字符串
    line = line.strip('\n')		#strip去除line两端的换行符
    if len(line) == 0:		#空行则结束本次循环即s不加1
        continue
    s += 1
print("共{}行".format(s))

练习2 文件字符分布

统计文件中,a~z的字符分布,以及字符总数

f = open("latex.log")
cc = 0
d = {}
for i in range(26):		#字典键入,0~25对应a~z,赋值为0
    d[chr(ord('a')+i)] = 0
for line in f:		#对文件逐行读取
    for c in line:		#行内每个字符进行统计
        d[c] = d.get(c, 0) + 1		#取键C的值,因为上面给过了,所以至少为零,这里的0作为一种保险手段出现
        cc += 1		#总字数
print("共{}字符".format(cc), end="")
for i in range(26):
    if d[chr(ord('a')+i)] != 0:		#判断值是否为0,为0则不输出
        print(",{}:{}".format(chr(ord('a')+i), d[chr(ord('a')+i)]), end="")

练习3 文件独特行数

f = open("latex.log")
ls = f.readlines()		#一次性读出所有行,每一行一个元素存入列表
s = set(ls)		#列表变集合,去重,得到所有行的种类
for i in s:		#遍历s中的每个元素,将之从ls中数量-1
    ls.remove(i)
t = set(ls)		#这时ls中剩下的元素,就是所有存在相同副本的元素,再次去重
print("共{}独特行".format(len(s)-len(t)))
#t为有副本的行的种类数,s为所有行的种类数,做差得到无副本行的种类数

练习4 CSV格式变换

将每行按照列逆序排列后输出,不改变空格逗号的布局

f = open("data.csv")
for line in f:		#逐行读入
    line = line.strip("\n")		#去除每行两侧的换行符
    ls = line.split(",")	#对于行内,根据逗号分隔,获得元素保存在列表ls
    ls = ls[::-1]		#将ls中所有元素逆序
    print(",".join(ls))		#输出元素,用逗号连接
#这里也可以将ls变为字符串,输出[1:-1],也就是除去开头结尾的中括号
f.close()

练习5 CSV格式数据清洗

去掉每个数据前后空格,即数据之间仅用逗号(,)分割

f = open("data.csv")
s = f.read()	#一次性全部读入,获得了一个大大的字符串
s = s.replace(" ","")	#将字符串中空格替换为空
print(s)
f.close()

测验 单选

python语言程序设计(MOOC 嵩天)第七章 程序整理(0302)_第1张图片
python语言程序设计(MOOC 嵩天)第七章 程序整理(0302)_第2张图片

测验1 文本的平均列数

计算附件文本的平均列数,空行不计入
(1)自编

f = open("latex.log","r")
c = 0
s = 0
txt = f.readlines()
for line in txt:
    line = line.strip('\n')
    if len(line) != 0:
        s+=1
        c+=len(line)
v = c//s
print(v)

(2)参考答案

f = open("latex.log")
s, c = 0, 0
for line in f:
    line = line.strip("\n")
    if line == "":
        continue
    s += len(line)
    c += 1
print(round(s/c))

#区别在于,四舍五入取整方式和空行判断

测验2 CSV格式清洗与转换

f = open("data.csv")
ls = f.readlines()		#分行存入列表ls
ls = ls[::-1]		#列表内元素逆序,也就是行逆序
lt = []
for item in ls:		#item为行,即读出的每一行,字符串类型
    item = item.strip("\n")		#每行两端去除换行符
    item = item.replace(" ", "")		#每行内去除空格
    lt = item.split(",")		#根据逗号分隔写入列表
    lt = lt[::-1]		#每行内逆序
    print(";".join(lt))		
#输出当前行,join前置分号,即分号连接元素输出
f.close()

#这道题的关键点在于readlines()后数据类型的理解和变换

你可能感兴趣的:(python基础)