2、
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计
数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文
件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径
解析:(毫无思路–学习别人的)
准备:
1、sys.stdin.write()与print()
python中调用print() 函数(print将需要的内容/对象打印到控制台上,然后追
加一个换行符)时实际上就是调用了sys.stdin.write('obj'+'\n'),
以下两行代码等价相同:
sys.stdin.write(‘hello’+'\n')
print('hello')
2、sys.stdin.readline() 与input
sys.stdin.readline()会将标准输入全部获取,包括末尾的'\n',因此len计算长度时
换行符'\n'也计算了,但是input() 输入返回的结果不包括'\n'的。
因此平时使用sys.stdin.readline() 时,需要去除'\n',
sys.stdin.readline() #一次只读一行
sys.stdin.readline().strip('\n')
sys.stdin.readline()[:-1]
import sys
import collections #对集合相关的操作模块
lst = []
dct = collections.OrderedDict() #有序字典包
#循环读取输入,将输入的出现次数计入有序字典里面
for line in sys.stdin: #遍历读取每一行,包括'\n'
ele = line.split('\\')[-1].strip('\n')
if ele not in lst:
lst.append(ele)
if ele in dct:
dct[ele] = dct[ele] + 1
else:
dct[ele] = 1
#对字典按照出现次数(value)排序
lstTuple = sorted(dct.items(), key = lambda d:d[1], reverse = True)
#输出不超过8行的结果
count = 0
for key in lstTuple:
if count > 7:
break
count = count + 1
#文件名取后16位
if len(key[0].split(' ')[0]) > 16:
print key[0].split(' ')[0][-16:], key[0].split(' ')[1], key[1]
else:
print key[0].split(' ')[0], key[0].split(' ')[1], key[1]