【RIA援建统计系统】by Arthals
-
新的一款coi数据处理程序,数据源仍然是/minecraft/logs/latest.log。
判断分类依据是/me 统计:xx,在latest文件中显示是“*Arthals 统计:xx”
可以无限列分类数据,处理各色coi数据,会统计各个玩家的added和removed的总和,排序方式为第一列Name栏从A-Z的顺序,统计出来的0数据会自动删去。
目前现有的主要用途为处理RIA的各期援建统计。
效果如下图:(仍然还有\t制表符,可以直接复制在Excel或者Numbers中查看)
-
编写总用时:7h
我裂开,从0开始学习python字典用法……
如果换人统计需要更改以下位置:Line 35、37、43,对于字符串的切片。
文件提取/储存路径需更改以下位置:Line 22, root
实用性待考证(现有函数有一处是删除每行末尾的 red_shulker_box)
-
源代码:
import os import os.path def is_number(s): try: float(s) return True except ValueError: return False def replaceList(list1, num, replace): list2 =[] for i in range(len(list1)): if i == num: list2.append(replace) else: list2.append(list1[i]) return list2 def part(num,list1): for i in range(len(list1)): if num<=list1[i]: return i break root="/Users/zhuozhiyongde/Desktop/" print("——Welcome!欢迎来到RCB援建数据统计系统,by Arthals——") data=open(str(root+"coi.txt"),"r") coi=[] all_coi_name=[] all_coi_value=[] count=[] all_coi={} tag=[] for line in data: coi.append(str(line)) for i in range(len(coi)): line=coi[i] if line[40:54]=="* Arthals 统计结束": break if line[40:53]=="* Arthals 统计:": tag.append(line[53:].rstrip("\n")) print("————Now",line[50:].rstrip("\n"),"————") coi2=[] how={} for l in range(i+1,len(coi)): if coi[l][40:52]=="* Arthals 统计": break else: t_f = is_number(coi[l][41]) if t_f == True: linex=coi[l][40:] linex_list=linex.split(" ") time=float(linex_list[0].rstrip("/h")) if time<=410: linex_list.remove("ago") linex_list.remove("-") linex_list.remove("red_shulker_box.\n") if linex_list[3]=="x54": continue if linex_list[2]=="removed": if linex_list[1] in how: how[linex_list[1]]=how[linex_list[1]]-int(linex_list[3].lstrip("x")) elif linex_list[1] not in how: how[linex_list[1]]=-int(linex_list[3].lstrip("x")) else: print("Error") break if linex_list[2]=="added": if linex_list[1] in how: how[linex_list[1]]=how[linex_list[1]]+int(linex_list[3].lstrip("x")) elif linex_list[1] not in how: how[linex_list[1]]=int(linex_list[3].lstrip("x")) else: print("Error") break name=list(how.keys()) count.append(len(name)+1) for y in range(len(name)): all_coi_name.append(name[y]) value=list(how.values()) for y in range(len(value)): all_coi_value.append(value[y]) sort=[] for i in range(len(all_coi_name)): if all_coi_name[i] in sort: continue else: sort.append(all_coi_name[i]) sort.sort() all_count=[] for i in range(len(count)): if i==0: all_count.append(count[i]) else: all_count.append("0") all_count=replaceList(all_count,i,int(count[i]+all_count[i-1])) all_count_change=[] for i in range(len(all_count)): all_count_change.append(int(all_count[i]-1)) all_count=all_count_change bt=[] for i in range(len(tag)+2): if i==0: bt.append("ID\t") elif i != len(tag)+1: bt.append(str(tag[i-1])+"\t") else: bt.append(str("\n")) ''' del_count=[] for i in range(len(all_coi_value)): if all_coi_value[i]==0: del_count.append(i) for i in range(len(del_count)): del all_coi_value[i] del all_coi_name[i] ''' change=[] for i in range(len(all_coi_value)): change.append(abs(all_coi_value[i])) all_coi_value=change log=open(str(root+"result.txt"),"a+") btpr="" for i in range(len(bt)): btpr=btpr+str(bt[i]) log.write(btpr) print(btpr) change1=[] for i in range(len(all_coi_value)): if all_coi_value[i]!=0: change1.append(all_coi_value[i]) else: change1.append("") all_coi_value=change1 for i in range(len(sort)): pr=str(sort[i]+"\t") dic={} for x in range(len(tag)): dic[x]="\t" for l in range(len(all_coi_name)): if all_coi_name[l]==sort[i]: n=part(l,all_count) dic[n]=all_coi_value[l] for m in range(len(dic)): if m !=len(dic)-1: if str(list(dic.values())[m])=="\t": pr=pr+str(list(dic.values())[m]) else: pr=pr+str(list(dic.values())[m])+"\t" else: if str(list(dic.values())[m])=="\t": pr=pr+"\n" else: pr=pr+str(list(dic.values())[m])+"\n" print(pr) log.write(pr) log.close() ''' log.write(str("ID\t"+line[53:])) for n in range(len(how)): log.write(str(str(name[n])+"\t"+str(value[n]).lstrip("-")+"\n")) log.close() '''
-
@Arthals 可上下滑动,含注释总行数达164。
-
淦啊,数据有两个位置不对,我裂开,又有Bug
-
淦,充分的显露出了我的无知
-
art nb!
-
源代码更改:
因为之前有点脑残的一步,其导致在各项分割线上的数据可能会出现问题,经过排查已经修改完毕。
编程语言:Python
自定义参数目前含有(未来可能会修改为输入之后自动代入):- 统计人ID:Line 35、37、43,对于字符串的切片+字符串内容
- 根目录位置:Line 22, root
- 统计目标:分类方法是按照/me 统计:xx分类,coi数据最后的物品类型会被抛弃,可以理解为这些箱子里的东西全都会被看做xx。
- coi数据时间分割:Line 51,if之后的语句。
import os import os.path def is_number(s): try: float(s) return True except ValueError: return False def replaceList(list1, num, replace): list2 =[] for i in range(len(list1)): if i == num: list2.append(replace) else: list2.append(list1[i]) return list2 def part(num,list1): for i in range(len(list1)): if num<=list1[i]: return i break root="/Users/zhuozhiyongde/Desktop/" print("——Welcome!欢迎来到RCB援建数据统计系统,by Arthals——") data=open(str(root+"coi.txt"),"r") coi=[] all_coi_name=[] all_coi_value=[] count=[] all_coi={} tag=[] for line in data: coi.append(str(line)) for i in range(len(coi)): line=coi[i] if line[40:54]=="* Arthals 统计结束": break if line[40:53]=="* Arthals 统计:": tag.append(line[53:].rstrip("\n")) print("Now:",line[50:].rstrip("")) coi2=[] how={} for l in range(i+1,len(coi)): if coi[l][40:52]=="* Arthals 统计": break else: t_f = is_number(coi[l][41]) if t_f == True: linex=coi[l][40:] linex_list=linex.split(" ") time=float(linex_list[0].rstrip("/h")) if time<=410: linex_list.remove("ago") linex_list.remove("-") linex_list.pop() if linex_list[3]=="x54": continue if linex_list[2]=="removed": if linex_list[1] in how: how[linex_list[1]]=how[linex_list[1]]-int(linex_list[3].lstrip("x")) elif linex_list[1] not in how: how[linex_list[1]]=-int(linex_list[3].lstrip("x")) else: print("Error") break if linex_list[2]=="added": if linex_list[1] in how: how[linex_list[1]]=how[linex_list[1]]+int(linex_list[3].lstrip("x")) elif linex_list[1] not in how: how[linex_list[1]]=int(linex_list[3].lstrip("x")) else: print("Error") break name=list(how.keys()) count.append(len(name)) for y in range(len(name)): all_coi_name.append(name[y]) value=list(how.values()) for y in range(len(value)): all_coi_value.append(value[y]) sort=[] for i in range(len(all_coi_name)): if all_coi_name[i] in sort: continue else: sort.append(all_coi_name[i]) sort.sort() all_count=[] for i in range(len(count)): if i==0: all_count.append(count[i]) else: all_count.append("0") all_count=replaceList(all_count,i,int(count[i]+all_count[i-1])) all_count_change=[] for i in range(len(all_count)): all_count_change.append(int(all_count[i]-1)) all_count=all_count_change bt=[] for i in range(len(tag)+2): if i==0: bt.append("ID\t") elif i != len(tag)+1: bt.append(str(tag[i-1])+"\t") else: bt.append(str("\n")) change=[] for i in range(len(all_coi_value)): change.append(abs(all_coi_value[i])) all_coi_value=change log=open(str(root+"result.txt"),"a+") btpr="" for i in range(len(bt)): btpr=btpr+str(bt[i]) log.write(btpr) print(btpr) change1=[] for i in range(len(all_coi_value)): if all_coi_value[i]!=0: change1.append(all_coi_value[i]) else: change1.append("") all_coi_value=change1 for i in range(len(sort)): pr=str(sort[i]+"\t") dic={} for x in range(len(tag)): dic[x]="\t" for l in range(len(all_coi_name)): if all_coi_name[l]==sort[i]: n=part(l,all_count) dic[n]=all_coi_value[l] print(sort[i],"\n",dic,"\n————————————————————") for m in range(len(dic)): if m !=len(dic)-1: if str(list(dic.values())[m])=="\t": pr=pr+str(list(dic.values())[m]) else: pr=pr+str(list(dic.values())[m])+"\t" else: if str(list(dic.values())[m])=="\t": pr=pr+"\n" else: pr=pr+str(list(dic.values())[m])+"\n" log.write(pr) log.close()
目前更改之后的数据(Dark_yu和kumaria_927的数据被更正):
-
又仔细看了一遍代码,发现如果移走或者放入的数量为54,将会被自动删去(援建的数据中包含火嗷放入物品x54)。
如果不需要此功能,请删除程序Line 55,56
-
嗯...嗯,我知道了,原来如此(骨王脸)
-
源代码更改x2:
自定义参数均改为开始询问输入,不必再修改任何源码了。
编程语言:Python
自定义参数:- 统计人ID
- 根目录位置
- 统计目标:分类方法是按照/me 统计:xx分类,coi数据最后的物品类型会被抛弃,可以理解为这些箱子里的东西全都会被看做xx。
- coi数据时间分割(起始、截止共2个)
- 是否含有x54的数据
import os import os.path def is_number(s): try: float(s) return True except ValueError: return False def replaceList(list1, num, replace): list2 =[] for i in range(len(list1)): if i == num: list2.append(replace) else: list2.append(list1[i]) return list2 def part(num,list1): for i in range(len(list1)): if num<=list1[i]: return i break root=str(input("请输入文件目录路径(不含有/coi.txt):")) print("——Welcome!欢迎来到RCB援建数据统计系统,by Arthals——") logID=str(input("请输入统计人ID:")) TimeLog1=float(input("请输入较小的时间刻度(正整数):")) TimeLog2=float(input("请输入较大的时间刻度(正整数):")) config=str(input("是否删除数量为54的数据,如果是,请输入yes;如果不是,请输入no:")) data=open(str(root+"coi.txt"),"r") len_logID=len(logID) coi=[] all_coi_name=[] all_coi_value=[] count=[] all_coi={} tag=[] for line in data: coi.append(str(line)) for i in range(len(coi)): line=coi[i] if line[40:47+len_logID]==str("* "+logID+" 统计结束"): break if line[40:46+len_logID]==str("* "+logID+" 统计:"): tag.append(line[46+len_logID:].rstrip("\n")) print("Now:",line[43+len_logID:].rstrip("")) coi2=[] how={} for l in range(i+1,len(coi)): if coi[l][40:45+len_logID]=="* "+logID+" 统计": break else: t_f = is_number(coi[l][41]) if t_f == True: linex=coi[l][40:] linex_list=linex.split(" ") time=float(linex_list[0].rstrip("/h")) if TimeLog1<=time<=TimeLog2: linex_list.remove("ago") linex_list.remove("-") linex_list.pop() if config=="yes" and linex_list[3]=="x54": continue if linex_list[2]=="removed": if linex_list[1] in how: how[linex_list[1]]=how[linex_list[1]]-int(linex_list[3].lstrip("x")) elif linex_list[1] not in how: how[linex_list[1]]=-int(linex_list[3].lstrip("x")) else: print("Error") break if linex_list[2]=="added": if linex_list[1] in how: how[linex_list[1]]=how[linex_list[1]]+int(linex_list[3].lstrip("x")) elif linex_list[1] not in how: how[linex_list[1]]=int(linex_list[3].lstrip("x")) else: print("Error") break name=list(how.keys()) count.append(len(name)) for y in range(len(name)): all_coi_name.append(name[y]) value=list(how.values()) for y in range(len(value)): all_coi_value.append(value[y]) sort=[] for i in range(len(all_coi_name)): if all_coi_name[i] in sort: continue else: sort.append(all_coi_name[i]) sort.sort() all_count=[] for i in range(len(count)): if i==0: all_count.append(count[i]) else: all_count.append("0") all_count=replaceList(all_count,i,int(count[i]+all_count[i-1])) all_count_change=[] for i in range(len(all_count)): all_count_change.append(int(all_count[i]-1)) all_count=all_count_change bt=[] for i in range(len(tag)+2): if i==0: bt.append("ID\t") elif i != len(tag)+1: bt.append(str(tag[i-1])+"\t") else: bt.append(str("\n")) change=[] for i in range(len(all_coi_value)): change.append(abs(all_coi_value[i])) all_coi_value=change log=open(str(root+"result.txt"),"a+") btpr="" for i in range(len(bt)): btpr=btpr+str(bt[i]) log.write(btpr) print(btpr) change1=[] for i in range(len(all_coi_value)): if all_coi_value[i]!=0: change1.append(all_coi_value[i]) else: change1.append("") all_coi_value=change1 for i in range(len(sort)): pr=str(sort[i]+"\t") dic={} for x in range(len(tag)): dic[x]="\t" for l in range(len(all_coi_name)): if all_coi_name[l]==sort[i]: n=part(l,all_count) dic[n]=all_coi_value[l] print(sort[i],"\n",dic,"\n————————————————————") for m in range(len(dic)): if m !=len(dic)-1: if str(list(dic.values())[m])=="\t": pr=pr+str(list(dic.values())[m]) else: pr=pr+str(list(dic.values())[m])+"\t" else: if str(list(dic.values())[m])=="\t": pr=pr+"\n" else: pr=pr+str(list(dic.values())[m])+"\n" log.write(pr) log.close()
-
原来是这样!我完全懂了!←完全不懂
-
为了提高实用性,我将文件封包成了exe和unix可执行文件。
现在可以不下载Python即可使用程序了,注意使用前请将文件改名为coi.txt!!!
exe适用于Windows系统,unix适用于Mac OS/Linux系统
运行截图:
-
是大佬
-
突然想到,因为使用了abs()函数,以实现所有的负值将会变为正值,换言之,如果有个玩家拿走了总共56个会显示 56 ,但是如果有个玩家放入了56个 也会显示 56 所有需要加以区分(因为已经封包所以懒得再修了……)
-
@Huoao_buao 是大佬
-
惹不起 是大佬 我死了 小声:你什么时候来干活啊喂
-
如果从群文件中下载Unix可执行文件可能会使其变成普通文稿:解决方法如下:
打开terminal之后输入 chmod +x ,然后将文件拖入终端,回车。回来再看你会发现已经变回Unix可执行文件了。
-
从零学习GUI中
-
救救孩子……怎么能让这玩意好看一点啊……
推荐话题
最近话题
-
申请担保
传呼处4 -
黑市二期店主开始招募了!
后勤社37 -
出售凋零头,大量收购命名牌
人力市场6 -
明年RIA会变成什么样子呢
日常24 -
脚本方块
日常6 -
申请担保
传呼处3 -
预告512128
Zth2 -
「申必」必主席语录新编。
日常22 -
地图制作:FractureSile--破裂基石
Zth65 -
【店铺白送】抹岚集市招商!免费的那种~
公用告示板6 -
东方红太阳升
日常3 -
今天是抹岚一周年...
Zth4 -
无主房屋处理
Zth8 -
DD的抄城堡日记(咕咕更新中)
Zth41 -
【预告】小片3要来了???
摄爆社23 -
小片3拍摄开始,取景地点征集!
Zth77 -
Zth for pi !! 用树莓派登录zth的教程
Zth11 -
救命啊,有必应追我! @赛博精神byin
日常4