練習7: 文件和數據格式化
1.1 文件行數
描述
打印輸出附件文件的有效行數,注意:空行不計算爲有效行數。
輸入 | 輸出 |
---|---|
無 | 共100行 |
【參考代碼】
f = open("latex.log")
s = 0
for line in f:
line = line.strip('\n')
if len(line) == 0:
continue
s += 1
print("共{}行".format(s))
需要注意:for line in
f方式獲得的每行內容(在變量line中)包含換行符,所以,要通過strip()函數去掉換行符後再進行統計。這裏,空行指沒有字符的行。
1.2 文件字符分佈
描述
統計附件文件的小寫字母a-z的字符分佈,即出現a-z字符的數量,並輸出結果。
同時請輸出文件一共包含的字符數量。
注意輸出格式,各元素之間用英文逗號(,)分隔。
答案可能包含a-z共26個字符的分佈,如果某個字符沒有出現,則不顯示,輸出順序a-z順序。
輸入 | 輸出 |
---|---|
無 | 共999字符,a:11,b:22,c:33,d:44,e:55 |
【參考代碼】
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="")
使用 ord(‘a’)+i 配合 range()函數 可以遍歷一個連續的字符表。
1.3 文件獨特行數
描述
統計附件文件中與其他任何其他行都不同的行的數量,即獨特行的數量。
輸入 | 輸出 |
---|---|
無 | 共99獨特行 |
【參考代碼】
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)))
記住:如果需要"去重"功能,請使用集合類型。
ls.remove()可以去掉某一個元素,如果該行是獨特行,去掉該元素後將不在集合t中出現。
1.4 CSV格式列變換
描述
附件是一個CSV文件,請將每行按照列逆序排列後輸出,不改變各元素格式(如周圍空格佈局等)。
輸入輸出示例
這是一個格式示例,不是正確結果。
【參考代碼】
f = open("data.csv")
for line in f:
line = line.strip("\n")
ls = line.split(",")
ls = ls[::-1]
print(",".join(ls))
f.close()
1.5 CSV格式數據清洗
描述
附件是一個CSV文件,其中每個數據前後存在空格,請對其進行清洗,要求如下:
(1)去掉每個數據前後空格,即數據之間僅用逗號(,)分割;
(2)清洗後打印輸出。
【參考代碼】
f = open("data.csv")
s = f.read()
s = s.replace(" ","")
print(s)
f.close()
該CSV文件的每個數據中不包含空格,因此,可以通過替換空格方式來清洗。如果數據中包含空格,該方法則不適用。