- 本节内容的数据见 电脑F:\python数据\Python海量数据(精缩版) 或 百度网盘“我的数据文件/Python海量数据”
- 在本节内容中也许很多文件名特别长,但是这么做的好处是不用加注释,还是很值得提倡的
一、提取密码
csdnfilepath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdn.txt" //用于读文件
csdnpassfilepath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnpass.txt" //用于写文件
file=open(csdnfilepath,"rb")
passfile=open(csdnpassfilepath,"wb")
while True:
line=file.readline()
if not line:
break
line=line.decode("gbk","ignore") #现在文件中是二进制存取的,我们要解码,忽略那些转码之间的错误
linelist=line.split(" # ")
passfile.write((linelist[1]+"\n").encode("utf-8")) #编码为二进制数据
passfile.close()
file.close()
print("over")
二、对密码进行排序
csdnpassfilepath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnpass.txt"
passfile=open(csdnpassfilepath,"rb")
mypasslist=passfile.readlines()
passfile.close()
print("读取完成")
mypasslist.sort()
print("排序完成")
csdnpassfilesortpath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnsortpass.txt"
passsortfile=open(csdnpassfilesortpath,"wb")
for line in mypasslist:
passsortfile.write(line)
passsortfile.close()
print("写入完成")
三、统计密码出现的次数
mylist=[1111,2222,2222,2222,3333,3333,4444,4444,5566]
i=0
while i<len(mylist): #循环
times=1
password=mylist[i] #记录原始密码
#相等,统计次数, 保证不能超过列表的长度
while i+1<=len(mylist)-1 and mylist[i]==mylist[i+1]:
times+=1
i+=1
print(times,password)
i=i+1
'''
1 1111
3 2222
2 3333
2 4444
1 5566
csdnpassfilesortpath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnsortpass.txt"
passsortfile=open(csdnpassfilesortpath,"rb")
mylist=passsortfile.readlines()
passsortfile.close()
print("读取完成")
savepasswordtimesfilepath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnpasssorttimes.txt"
savepasswordtimesfile=open(savepasswordtimesfilepath,"wb")
length=len(mylist) #长度
i=0
while i<length: #循环
times=1
password=mylist[i].decode("utf-8") #记录原始密码
while i+1<=length-1 and mylist[i].decode("utf-8")== mylist[i+1].decode("utf-8"):
#永远不要忘了,你读出来的数据是二进制的,必须先解码
times+=1
i+=1
savepasswordtimesfile.write( (str(times)+" "+password).encode("utf-8") ) #编码为2进制存取
i+=1
savepasswordtimesfile.close()
结果展示:
四、把密码统计次数文件转换为字典
上面是密码统计次数的文件,我们想把它转换为字典的形式,而且按照密码次数进行排序
passwordtimesfilepath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnpasssorttimes.txt"
passwordtimesfile=open(passwordtimesfilepath,"rb")
mylist=passwordtimesfile.readlines()
passwordtimesfile.close()
print("读取完成")
#现在的mylist是一个“次数 密码”的二进制形式[b"32 abcdbc",b"333 123321"]
#我们想把它转换为[[32,"abcabc"],[333,"123321"]]的形式
passwordtimeslist=[]
for line in mylist:
line=line.decode("utf-8") #把二进制文件解码
tmplist=line.split(" ")
passwordtimeslist.append(tmplist)
print("提取完成")
passwordtimeslist.sort(key=lambda x:int(x[0])) #按照出现的次数排序
passwordtimeslist.reverse() #从大到小的排序
print("排序完成")
savedictfilepath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnpasssorttimesdict.txt"
savedictfile=open(savedictfilepath,"wb")
for tmplist in passwordtimeslist:
savedictfile.write( (tmplist[0]+" "+tmplist[1]).encode("utf-8"))
savedictfile.close()
print("over")
五、一步到位
将上述过程一步到位
inputpath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdn.txt"
outputpath="E:\python数据分析\百度网盘\Python数据分析海量数据营销day1\Python数据分析海量数据营销day1\password\csdnlast.txt"
inputfile=open(inputpath,"rb")
outputfile=open(outputpath,"wb")
alllinelist=inputfile.readlines() #全部读取
print("读取完成")
passwordlist=[]
for line in alllinelist:
line=line.decode("gbk","ignore") #务必先解码转换成字符才能处理
linelist=line.split(" # ")
if len(linelist)==3:
passwordlist.append(linelist[1]) #密码加入到列表
del alllinelist #这是大文件,不用的变量务必及时处理,清理内存
print("提取密码完成")
passwordlist.sort()
print("密码排序完成")
passwordtimeslist=[] #用来统计次数
length=len(passwordlist)
i=0
while i<length:
times=1
password=passwordlist[i]
while i+1<=length-1 and passwordlist[i]==passwordlist[i+1]:
times+=1
i+=1
passwordtimeslist.append([password,times])
i+=1
del passwordlist
print("次数统计完成")
passwordtimeslist.sort(key=lambda x:x[1] )
passwordtimeslist.reverse()
print("次数排序完成")
for line in passwordtimeslist:
outputfile.write((str(line[0])+" # "+str(line[1])+"\n").encode("utf-8"))
print("密码写入完成")
inputfile.close()
outputfile.close()