文章目录
Week7 文件和数据格式化
7.1 文件行数
题目
打印输出附件文件的有效行数,注意:空行不计算为有效行数。
输入输出格式:这是仅给出输出格式样例,不是结果。
输出示例 共100行
附件 latex.log
参考代码
注意:
for line in f方式获得的每行内容(在变量line中)包含换行符,
所以,要通过strip()函数去掉换行符后再进行统计。
这里,空行指没有字符的行。
f = open("latex.log")
s = 0
for line in f:
line = line.strip('\n')
if len(line) == 0:
continue
s += 1
print("共{}行".format(s))
解题代码
f = open("latex.log")
s = 0
for line in f:
line = line.strip('\n')
if len(line) == 0:
continue
s += 1
print("共{}行".format(s))
7.2 文件字符分布
题目
统计附件文件的小写字母a-z的字符分布,即出现 a-z 字符的数量,并输出结果。
同时请输出文件一共包含的字符数量。
注意输出格式,各元素之间用英文逗号(,)分隔。
答案可能包含 a-z 共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序按 a-z 顺序。
输入输出格式:这是仅给出输出格式样例,不是结果。
输出示例 共999字符,a:11,b:22,c:33,d:44,e:55
附件 latex.log
参考代码
使用
ord('a')+i
配合range()
函数 可以遍历一个连续的字符表。
f = open("latex.log")
cc = 0
d = {}
for i in range(26):
d[chr(ord('a')+i)] = 0
for line in f:
for c in line:
d[c] = d.get(c, 0) + 1
cc += 1
print("共{}字符".format(cc), end="")
for i in range(26):
if d[chr(ord('a')+i)] != 0:
print(",{}:{}".format(chr(ord('a')+i), d[chr(ord('a')+i)]), end="")
解题代码
f = open("latex.log")
cc = 0
d = {}
for i in range(26):
d[chr(ord('a')+i)] = 0
for line in f:
for c in line:
d[c] = d.get(c, 0) + 1
cc += 1
print("共{}字符".format(cc), end="")
for i in range(26):
if d[chr(ord('a')+i)] != 0:
print(",{}:{}".format(chr(ord('a')+i), d[chr(ord('a')+i)]), end="")
7.3 文件独特行数
题目
统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。
输入输出格式:这是仅给出输出格式样例,不是结果。
输出示例 共99独特行
附件 latex.log
参考代码
重点:
如果需要"去重"功能,请使用集合类型。
ls.remove()
可以去掉某一个元素,如果该行是独特行,去掉该元素后将不在集合t
中出现。
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)))
解题代码
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)))
7.4 CSV格式列变换
题目
附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。
输入输出格式:这是仅给出输出格式样例,不是结果。
输入示例:
(文件内容示例)
1,2,3,4
a,b,c,d
输出示例:
4,3,2,1
d,c,b,a
附件 data.csv
参考代码
f = open("data.csv")
for line in f:
line = line.strip("\n")
ls = line.split(",")
ls = ls[::-1]
print(",".join(ls))
f.close()
解题代码
f = open("data.csv")
for line in f:
line = line.strip("\n")
ls = line.split(",")
ls = ls[::-1]
print(",".join(ls))
f.close()
7.5 CSV格式数据清洗
题目
附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下:
(1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割;
(2)清洗后打印输出。
输入输出格式:这是仅给出输出格式样例,不是结果。
输入示例:
(文件内容示例)
1, 2, 3, 4, 5
'a', 'b' , 'c' , 'd','e'
输出示例:
1,2,3,4,5
'a','b','c','d','e'
参考代码
该CSV文件的每个数据中不包含空格,因此,可以通过替换空格方式来清洗。
如果数据中包含空格,该方法则不适用。
f = open("data.csv")
s = f.read()
s = s.replace(" ","")
print(s)
f.close()
解题代码
f = open("data.csv")
s = f.read()
s = s.replace(" ","")
print(s)
f.close()