作业程序题
一、文本的平均列数
题目描述:打印输出附件文件的平均列数,计算方法如下:
(1)有效行指包含至少一个字符的行,不计算空行;
(2)每行的列数为其有效字符数;
(3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。
t = open(“latex.log”,encoding=’utf-8′)
l=0
c=0
for line in t:
line = line.strip(“\n”)
if line==””:
continue
l+=1
c+=len(line)
print(round(c/l))
注意点:①Python3.8版本中round()函数五舍六入。
②每一行中都有换行字符“\n”,先去掉换行字符再判断是否为空行。
二、CSV格式清洗与转换
题目描述:附件是一个CSV格式文件,提取数据进行如下格式转换:
(1)按行进行倒序排列;
(2)每行数据倒序排列;
(3)使用分号(;)代替逗号(,)分割数据,无空格;
按照上述要求转换后将数据输出。
输入
输出
示例
1,2,3
4,5,6
7,8,9
9;8;7
6;5;4
3;2;1
f=open(“data.csv”)
line=f.readlines()
line.reverse()
for i in line:
i=i.replace(‘\n’,”)
a=i.split(“,”)
a.reverse()
print(“;”.join(a))
参考链接:https://blog.csdn.net/weixin_44521703/article/details/91128714?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159667452619724835856936%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159667452619724835856936&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-2-91128714.first_rank_ecpm_v3_pc_rank_v2&utm_term=CSV%E6%A0%BC%E5%BC%8F%E6%B8%85%E6%B4%97%E4%B8%8E%E8%BD%AC%E6%8D%A2&spm=1018.2118.3001.4187
练习程序题
一、文件行数
描述:打印输出附件文件的有效行数,注意:空行不计算为有效行数。
这个题目比较容易这里直接给出代码。
t = open(“latex.log”,”rt”,encoding=’utf-8′)
s=0
for i in t:
i=i.replace(“\n”,””)
if i==””:
continue
s+=1
print(“共{}行”.format(s))
二、文件字符分布
描述:统计附件文件的小写字母a-z的字符分布,即出现a-z字符的数量,并输出结果。
同时请输出文件一共包含的字符数量。
注意输出格式,各元素之间用英文逗号(,)分隔。
答案可能包含a-z共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序a-z顺序。
解题思路:
①遍历文件中的每一个字符
②判断小写字母
③输出格式控制
对于我来说,其中第三点是最难想到的!
t = open(“latex.log”,”rt”,encoding=’utf-8′)
t=t.read()
s=0
t=list(t)
counts ={}
for i in t:
if i<=’z’ and i>=’a’:
counts[i]=counts.get(i,0)+1
s+=1
print(“共{}字符”.format(s),end=””)
for i in range(97,123):
print(“,{}:{}”.format(chr(i),counts[chr(i)]),end=””)
第一点:用for in 语句遍历文件
第二点:字符之间的大小比较,判断小写字母
第三点:字典存储小写字母及其个数(文本词频统计里面提到过)
第四点:for in range(97,123)控制输出97是a的Unicode,122是z的Unicode。
第四点参考链接:https://blog.csdn.net/weixin_43429677/article/details/107429749?biz_id=102&utm_term=%E6%96%87%E4%BB%B6%E5%AD%97%E7%AC%A6%E5%88%86%E5%B8%83python&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-107429749&spm=1018.2118.3001.4187
三、文件独特行数
描述:统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。
f = open(“latex.log”)
ls = f.readlines()
s = set(ls)
for i in s:
ls.remove(i)
t = set(ls)
print(“共{}独特行”.format(len(s)-len(t)))
这个题目比较有意思!
代码解释:一个文件内容为2,2,3,3,4,执行s=set(ls)操作之后,得到独特元素个数+非独特元素个数,只剩下2,3,4,现在从文件中剔除s中出现的元素(这里只剔除出现在s中的元素一遍),此时文件中所有的独特元素被剔除,因此对文件元素再执行set()操作,之后执行len()操作,得到非独特元素的个数,和上面的(独特元素个数+非独特元素个数)相减,即为独特元素的个数。
以上是对单个字符的举例解释,此题类比到行即可。
四、CSV格式列变换
描述:附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。
输入输出示例:这是一个格式示例,不是正确结果。
输入
输出
示例
1,2,3,4
a,b,c,d
4,3,2,1
d,c,b,a
f=open(“data.csv”)
line=f.readlines()
for i in line:
i=i.replace(‘\n’,”)
a=i.split(“,”)
a.reverse()
print(“,”.join(a))
此题和作业题第二题相似,此处不再赘述。
五、CSV格式数据清洗
描述:附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下:
(1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割;
(2)清洗后打印输出。
输入输出示例:这是一个格式示例,不是正确结果。
输入
输出
示例
(在文件中)
1, 2, 3, 4, 5
‘a’, ‘b’ , ‘c’ , ‘d’,’e’
1,2,3,4,5
‘a’,’b’,’c’,’d’,’e’
f=open(“data.csv”)
line=f.readlines()
for i in line:
i=i.replace(‘\n’,”)
i=i.replace(” “,”)
a=i.split(“,”)
print(“,”.join(a))
与上题类似,不再展开解释。