python 1 2 3怎么拼接所有可能的数_Python学习基础2-多个表中的内容合并在一起

#如何将多个表中的内容合并在一起

#思路:使用excel模块,比如xlrd,xlwt,openpyxl,xlsxwriter等模块。

#xlrd模块主要用于读取excel表,

#xlwt与xlsxwriter用于将数据写入表中,但不能修改表

#方案1:使用openpyxl,只对xlsx有效

#方案2:仍然使用xlwt与xlsxwriter等模块,先将每次读取的信息存储到list(列表)中,然后一次写入。

import xlrd,xlsxwriter

#待合并excel,列表形式存储需要合并的文件

allxls=['/Users/zanghong/Documents/腾讯工作/原始数据/第一个测试文件.xlsx',

'/Users/zanghong/Documents/腾讯工作/原始数据/第二个测试文件.xlsx',

'/Users/zanghong/Documents/腾讯工作/原始数据/第三个测试文件.xlsx']

#目标excel,设置合并好的文件存储的路径

end_xls='/Users/zanghong/Documents/腾讯工作/原始数据/合并测试文件.xlsx'

#打开表格

def open_xls(file):

try:

fb=xlrd.open_workbook(file)

return fb

except Eexception as e:

print('打开文件错误:'+e)

#获取所有sheet

def getsheet(fh):

return fh.sheets()

#读取某个sheet的行数

def getnrows(fh,sheet):

table=fh.sheets()[sheet]

shnrows=table.nrows

return shnrows

#读取某个文件的内容并返回所有行的值

def get_file_value(fb,shnum):

fh=open_xls(fb)#打开此文件

table=fh.sheet_by_name(shname[shnum])#获取当前文件当前sheet名的内容

row_num=getnrows(fh,shnum)#得到行数

lenrvalue=len(rvalue)#一开始lenrvalue为0,随着以行为单位的继续添加,rvalue长度按行数增加。当一个sheet为单位的循环结束后,rvalue长度增加一个sheet为单位的长度。

print('看这里'+str(lenrvalue))

if y>0:

for row in range(1,row_num):#按行读取,一行一行读取,读取整个sheet

rdata=table.row_values(row)

rvalue.append(rdata)

print(rvalue[lenrvalue:])

filevalue.append(rvalue[lenrvalue:])#按sheet为单位,添加到文件中。因前面每次循环增加完一个sheet,此时rvalue长度即为加入的sheet的总行数,所以从现行数开始向文件中添加后续的sheet。

else:

for row in range(0,row_num):#按行读取,一行一行读取,读取整个sheet

rdata=table.row_values(row)

rvalue.append(rdata)

print(rvalue[lenrvalue:])

filevalue.append(rvalue[lenrvalue:])#按sheet为单位,添加到文件中。因前面每次循环增加完一个sheet,此时rvalue长度即为加入的sheet的总行数,所以从现行数开始向文件中添加后续的sheet。

return filevalue

shname=[]

filevalue=[]

svalue=[]

rvalue=[]

#读取第一个待读文件,获取sheet数

f1=open_xls(allxls[0])#打开第一个文件

sh=getsheet(f1)#获得所有sheet

x=0

for sheet in sh:#按照列表方式遍历,不是按照数字遍历,想知道循环几次,用x来计数。

shname.append(sheet.name)

svalue.append([])#有几种类型的sheet就设立几个数组,以相同名称的sheet为单位往里添加数据为一组

x+=1

#依次读取各sheet的内容

#依次读取各文件当前sheet的内容

for shnum in range(0,x):#第一个文件中有x个sheet,依次遍历

lenfvalue=len(filevalue)

y=0

for fb in allxls:#依次读取各文件,取各文件相同sheet名的内容

print('正在读取文件:'+str(fb)+'的第'+str(shnum)+'个标签...')

filevalue=get_file_value(fb,shnum) #filevalue为三维度[file1[行1['列1','列2','列3'],行2['列1','列2','列3'],...行n['列1','列2','列3']]...filen[行1['列1','列2','列3'],行2['列1','列2','列3'],...行n['列1','列2','列3']]]

y+=1

svalue[shnum].append(filevalue)#内层循环完后,得到一组各个文件相同sheet名的所有内容,直接添加到svalue中[[0[[[]]]],[1[[[]]]],[2[[[]]]]]

print(shnum)

print(svalue[shnum])

print(svalue[0])

print(svalue[1])

#由于append具有叠加关系,分析可得所有信息均在svalue[0][0]中存储

#print(svalue)

#svalue[0][0]元素数量为sheet标签数(sn)*文件数(fn)

sn=x

fn=len(allxls)

endvalue=[]

def getsvalue(k):

for z in range(k,k+fn):

endvalue.append(svalue[0][0][z])

return endvalue

#打开最终写入的文件

wb1=xlsxwriter.Workbook(end_xls)

#创建一个sheet工作对象

ws=wb1.add_worksheet()

polit=0

linenum=0

#依次遍历每个sheet中的数据

for s in range(0,sn*fn,fn):#步长为文件数

thisvalue=getsvalue(s)

tvalue=thisvalue[polit:]

#将一个标签的内容写入新文件中

for a in range(0,len(tvalue)):

for b in range(0,len(tvalue[a])):

for c in range(0,len(tvalue[a][b])):

data=tvalue[a][b][c]

ws.write(linenum,c,data)

linenum+=1

#叠加关系,需要设置分割点

polit=len(thisvalue)

wb1.close()

# In[ ]:

# In[ ]:

# In[ ]:

#svalue[0][0]元素数量为sheet标签数(sn)*文件数(fn)

sn=x

fn=len(allxls)

endvalue=[]

def getsvalue(k):

for z in range(k,k+fn):

endvalue.append(svalue[0][0][z])

return endvalue

#打开最终写入的文件

wb1=xlsxwriter.Workbook(end_xls)

#创建一个sheet工作对象

ws=wb1.add_worksheet()

polit=0

linenum=0

#依次遍历每个sheet中的数据

for s in range(0,sn*fn,fn):#步长为文件数

thisvalue=getsvalue(s)

tvalue=thisvalue[polit:]

#将一个标签的内容写入新文件中

for a in range(0,len(tvalue)):

for b in range(0,len(tvalue[a])):

for c in range(0,len(tvalue[a][b])):

data=tvalue[a][b][c]

ws.write(linenum,c,data)

linenum+=1

#叠加关系,需要设置分割点

polit=len(thisvalue)

wb1.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值