您的位置:首页 > 其它

导入CSV文件就行数据整理分析

2018-07-18 12:02 387 查看
#-*-coding:utf-8-*-
import csv,os,re,math
localPath=input("请输入所有群文件的根目录:")    #所有QQ群文件的物理根目录路径
def info():
info_dic=[]

dirList=os.listdir(localPath)      #获取根目录下所有QQ群文件的名称
#遍历每个群
for i in dirList:
group_list=re.findall(r"(.+)[(]|([0-9]+)[)][.]",i) #检索群名称和号码
if len(group_list)==1:
group_name=group_list[0][0].strip()  #群名称
group_nums=group_list[0][1].strip()  #群号码
else:
group_name=group_list[0][0].strip()
group_nums=group_list[1][1].strip()
file_localPath=localPath+"\\"+i  #拼接群文件路径
csv_reader = csv.reader(open(file_localPath,encoding='utf-8'))   #打开群文件
# print("---------------%s,%s---------------"%(group_name,group_nums))
#遍历每个群里的用户
for row in csv_reader:
user_list=re.findall(r"(.+)[<]|([0-9]+)@qq[.]com",row[0])  #检索用户名和号码
if len(user_list)==1:        #检索结果条件判断
user_name=user_list[0][0].strip()   #用户名
user_nums=user_list[0][1].strip()  #用户号码
else:
user_name=user_list[0][0].strip()
user_nums=user_list[1][1].strip()
info_dic.append((group_name,group_nums,user_name,user_nums))
return info_dic

#生成含有'QQ群名称', 'QQ群号码','QQ昵称','QQ号码'统计的CSV文件
def creatFile():
headers = ['QQ群名称', 'QQ群号码','QQ昵称','QQ号码']
with open('d:/info.csv', 'w',encoding='utf-8-sig',newline='') as f:  #默认生成文件保存在d:/info.csv
# 标头在这里传入,作为第一行数据
writer = csv.DictWriter(f, headers)
writer.writeheader()
Info=info()
for row in Info:
dic={'QQ群名称':row[0],'QQ群号码':row[1],'QQ昵称':row[2],'QQ号码':row[3]}
writer.writerow(dic)

#查找含有贷款|信用卡|借条的用户
def find_keywords_users():
Info=info()
for row in Info:
var=re.findall("贷款|信用卡|借条",row[2])
if var:
print("匹配到用户:%s(%s)含有%s,属于群:%s(%s)"%(row[2],row[3],var,row[0],row[1]))

#查找群众用户的数量
def count_userNums():
Info=info()
li=[]
group_users=[]
for row in Info:
li.append("%s(%s)"%(row[0],row[1]))
tu=set(li)
for i in tu:
Count=li.count(i)
group_users.append([i,Count])
print("%s这个群中,共有%d个用户"%(i,Count))
#每个群的平均昵称长度
def len_username_arg():
Info=info()
dic={}
for row in Info:
KEY=row[0]+row[1]
if KEY in dic.keys():
dic[KEY].append(len(row[2]))
else:
dic[KEY]=[len(row[2])]
for i in dic.items():
avg=sum(i[1])/len(i[1])
print("%s群的平均昵称长度是:%d"%(i[0],avg))

#每个群的平均QQ号码位数
def len_usernums_arg():
Info=info()
dic={}
for row in Info:
KEY=row[0]+row[1]
if KEY in dic.keys():
dic[KEY].append(len(row[3]))
else:
dic[KEY]=[len(row[3])]
for i in dic.items():
avg=sum(i[1])/len(i[1])
print("%s群的平均QQ号码位数是:%d位"%(i[0],avg))

#该群成员最大QQ号码位数
def len_usernums_max():
Info=info()
dic={}
for row in Info:
KEY=row[0]+row[1]
if KEY in dic.keys():
dic[KEY].append(len(row[3]))
else:
dic[KEY]=[len(row[3])]
for i in dic.items():
MAX=max(i[1])
print("%s群的最大QQ号码位数是:%d位"%(i[0],MAX))

#有最多共同用户的两个群
def users_max():
Info=info()
dic={}
for row in Info:
KEY=row[0]+row[1]
if KEY in dic.keys():
dic[KEY].append(row[3])
else:
dic[KEY]=[row[3]]
MAX_Len=0
group1=""
group2=""
for i in dic.items():
MAX=i
for x in dic.items():
if MAX[0] is not x[0]:
Len=len(set(MAX[1]).intersection(set(i[1])))
if Len>MAX_Len:
MAX_Len=Len
group1=MAX[0]
group2=x[0]
print("“%s”和“%s”有最多共同的QQ号码,共计:%d个"%(group1,group2,MAX_Len))


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: