代码编织梦想

目录

需求

二、具体实现

1.引入库:

2.读入数据

3.获取数据


需求

想用爱发电更新switch游戏库,现有一万多游戏的名单表格,想要解析数据转到txt之后导入到机器人中。

免责声明:本列表没有提供任何下载链接,整理表格仅出于学习爱好。


一、数据格式

二、具体实现

1.引入库:

需要用到xlrd库,新环境下没有装,使用pip install xlrd安装到2.x.x版本之后不能解析.xlsx文件,又下回到1.2.0版本才解决报错。

import xlrd
import math
xlrd.__version__    # 高版本报错  

2.读入数据

# 读入excel
ex = xlrd.open_workbook(r"C:\Users\wenxiang\Desktop\switch\list.xlsx")

sheet_names = ex.sheet_names()   # 获取所有 sheet 表格的名称
for i in range(1):
    sheet = ex.sheets()[i]   # 获取表格 sheetx 对象
    rows = sheet.nrows       # 获取工作表格的行数
    cols = sheet.ncols       # 获取工作表格的列数
    print('表格 "{}" 总共有 {} 行,{} 列'.format(sheet_names[i],rows,cols)) # 打印输出
输出:表格 "ffhome_NSGManager_Collection" 总共有 12425 行,12 列

3.获取数据

测试输出,分析数据格式,决定数据处理方法

temp = sheet.row(6) # 获取第 1 行的数据
print("第一行的数据为:",temp)
print(str(temp[0]).split('\'')[1])
print(len(str(temp[2]).split('\'')))
t = str(temp[2])
print(t[6:len(t)-1])

第一行的数据为: [text:'010000100FB62000', text:"Willy Jetman: Astromonkey's Revenge", text:'威利杰特曼:猴子宇航员的复仇', number:20200131.0, empty:'', text:'US', empty:'', number:65536.0, text:'/', text:'缺失APP', text:'缺失UPD', text:'不存在DLC'] 010000100FB62000

3

威利杰特曼:猴子宇航员的复仇

对于数据:text:'010000100FB62000',提取时使用split()函数,以单引号为划分界限提取出来列表的第二部分,另外表格中存在数据格式错误(科学计数法),使用朴素暴力的方法解决,即if或者try判断开头字母内容或是否抛出异常。

对于数据:text:"Willy Jetman: Astromonkey's Revenge",原本处理方法同上,但是有些名字里面有单引号,这会导致返回内容是以双引号进行划分,所以直接采取切片方式获取。

需求一:将一万多条数据写入一个total.txt文件中,不需要循环命名文本

# 设置txt生成路径
path = "C:\\Users\\wenxiang\\Desktop\\switch\\"
temp_str = str(path+"total.txt")
sqlfile = open(temp_str,"w",encoding='utf-8')
for rownum in range(0, rows):
    data = sheet.row(rownum)
    # 获取中文名
    name = str(data[2])
    len_name = len(name)
    if(len_name>3):
        value1 = name[6:len_name-1]      
    # 获取TID
    value2 = str(data[0])
    if(value2[0] == 'n'):
        value2 = value2[7:len(value2)-2]
    else:
        value2 = value2.split('\'')[1]
    # 获取英文名
    ename = str(data[1])
    len_ename = len(ename)
    if(len_ename>3):
        value_ename = ename[6:len_ename-1]
    # 获取语言
    value3 = str(data[4]).split('\'')[1]
    if(value3 != '中文'):
        value3 = '无中文'
        # 获取dlc
    value4 = str(data[8])
    if(value4[0] == 't'):
        value4 = '0'
    else:
        value4 = value4[7:len(value4)-2]

    # sqlfile.writelines("关键词:" + value1 + "\n")   
    sqlfile.writelines("游戏中文名:" + value1 + "\n")  # 将字符串写入txt文件中
    sqlfile.writelines("TID:" + value2 + "\n")
    sqlfile.writelines("游戏英文名:" + value_ename + "\n")
    sqlfile.writelines("语言:" + value3 + "\n")
    sqlfile.writelines("DLC数量:" + value4 + "\n")
    sqlfile.writelines("\n")



    print(value1,value2,value3,value4)
sqlfile.close()  # 关闭写入的文件

需求二:将一万多条数据按200个一组,分别写入一个txt中,需要循环命名文本

# 获取循环次数
num_c = math.ceil(rows / 200)
for i in range(num_c):
    begin = i * 200  # 设置循环头
    path = "C:\\Users\\wenxiang\\Desktop\\switch\\txt\\"  # txt文件base路径,方便拼接
    temp_str = str(path+str(i)+".txt")    # str(i)转字符后拼接出来绝对路径,实现循环命名
    sqlfile = open(temp_str,"w",encoding='utf-8')

    #对每个文本的处理逻辑
    for rownum in range(begin, begin+200):# 0~199  200~399
        data = sheet.row(rownum)
        # 获取中文名
        name = str(data[2])
        len_name = len(name)
        if(len_name>3):
            value1 = name[6:len_name-1]      
        # 获取TID
        value2 = str(data[0])
        if(value2[0] == 'n'):
            value2 = value2[7:len(value2)-2]
        else:
            value2 = value2.split('\'')[1]
        # 获取英文名
        ename = str(data[1])
        len_ename = len(ename)
        if(len_ename>3):
            value_ename = ename[6:len_ename-1]
        # 获取语言
        value3 = str(data[4]).split('\'')[1]
        if(value3 != '中文'):
            value3 = '无中文'
         # 获取dlc
        value4 = str(data[8])
        if(value4[0] == 't'):
            value4 = '0'
        else:
            value4 = value4[7:len(value4)-2]

        sqlfile.writelines("关键词:" + value1 + "\n")   
        sqlfile.writelines("游戏中文名:" + value1 + "\n")  # 将字符串写入txt文件中
        sqlfile.writelines("TID:" + value2 + "\n")
        sqlfile.writelines("游戏英文名:" + value_ename + "\n")
        sqlfile.writelines("语言:" + value3 + "\n")
        sqlfile.writelines("DLC数量:" + value4 + "\n")
        sqlfile.writelines("\n")



        print(value1,value2,value3,value4)
    sqlfile.close()  # 关闭写入的文件
sqlfile.close()  # 关闭写入的文件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Wenxiang77/article/details/130910258