excel数据获取写入txt-爱代码爱编程
目录
需求
想用爱发电更新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() # 关闭写入的文件