【RIA援建统计系统】by Arthals



  • 新的一款coi数据处理程序,数据源仍然是/minecraft/logs/latest.log。
    判断分类依据是/me 统计:xx,在latest文件中显示是“*Arthals 统计:xx”
    可以无限列分类数据,处理各色coi数据,会统计各个玩家的added和removed的总和,排序方式为第一列Name栏从A-Z的顺序,统计出来的0数据会自动删去。
    目前现有的主要用途为处理RIA的各期援建统计。
    效果如下图:(仍然还有\t制表符,可以直接复制在Excel或者Numbers中查看)
    11B3EAD7EAC081FB19C8D8602F715A2D.jpg
    66c1f6b2-6fe9-48cf-8c7b-8654295467ee-image.png



  • 编写总用时: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



  • 淦,充分的显露出了我的无知


  • 鱼乐社 冰道社 百游社 TW 笔走如飞

    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的数据被更正):
    f3111ddf-95cc-467f-8b3c-18ed4d9bfa22-image.png



  • 又仔细看了一遍代码,发现如果移走或者放入的数量为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()
    
    

    00e7d2d2-f63a-403a-9c39-95fd5bf54cb1-image.png


  • 百游社

    原来是这样!我完全懂了!←完全不懂



  • 为了提高实用性,我将文件封包成了exe和unix可执行文件。
    现在可以不下载Python即可使用程序了,注意使用前请将文件改名为coi.txt!!!
    exe适用于Windows系统,unix适用于Mac OS/Linux系统
    9da86813-3b51-4bc7-ad35-79668976ebf8-image.png a356c7bb-1990-40cb-ab36-4821eea8f3f2-image.png
    运行截图:
    347da173-959b-4885-98e5-cca4931018c9-image.png
    80b06ce5-2011-425d-8da1-fbb72626df2b-image.png
    50054238-06d7-4c3f-8818-a30a4f6d1b49-image.png
    664239e1-70fb-4b80-9858-2190e629177f-image.png


  • Zth国家地理 轨交社 泼墨挥毫

    是大佬



  • 突然想到,因为使用了abs()函数,以实现所有的负值将会变为正值,换言之,如果有个玩家拿走了总共56个会显示 56 ,但是如果有个玩家放入了56个 也会显示 56 所有需要加以区分(因为已经封包所以懒得再修了……)



  • @Huoao_buao 是大佬


  • 冰道社

    惹不起 是大佬 我死了 小声:你什么时候来干活啊喂



  • 如果从群文件中下载Unix可执行文件可能会使其变成普通文稿:解决方法如下:
    打开terminal之后输入 chmod +x ,然后将文件拖入终端,回车。回来再看你会发现已经变回Unix可执行文件了。
    cf116063-112b-4c4d-8d56-6698499633b2-image.png



  • 3b589b79-e024-48f9-b2f2-b4555c5890df-image.png
    从零学习GUI中



  • 救救孩子……怎么能让这玩意好看一点啊……
    f68c99e0-c139-4b30-ae21-74820a4bd589-image.png


 

推荐话题

最近话题

琼ICP备18003777号-1