目标
合并两个表格中的内容。
代码
chdir(Address)# 文件地址
tables = listdir()# 获得地址中的文件
tables_list = []
number_table_list=[]
nnumber_table_list = []
for lists in tables:
if ".xlsx" in lists: # 找出excel文件
list_name=lists
list_number = list_name.split('.', -1)[0]
if list_number.isdigit():
number_table_list.append(lists) # 以数字命名的文件
print(number_table_list)
else:
nnumber_table_list.append(lists) # 非数字命名的文件
print(nnumber_table_list)
number_table_list.sort(key=lambda x: int(x[:-5])) # 以数字命名的文件中进行排序,倒着数第四位'.'为分界线,按照‘.’左边的数字从小到大排序
print(number_table_list)
tables_list=number_table_list+nnumber_table_list # 合并已经排序排好的文件和非数字命名的文件
print("合并的表格:"+str(tables_list))
# 需要合并内容的源文件
source_xls = tables_list
data = []
for i in source_xls:
wb = xlrd.open_workbook(i)
for sheet in wb.sheets():
for rownum in range(sheet.nrows):
data.append(sheet.row_values(rownum))
# 设置存放数据的目标文件
target_xls = "out.xlsx"
# 写入数据
workbook = xlsxwriter.Workbook(target_xls)
worksheet = workbook.add_worksheet()
font = workbook.add_format({"font_size": 14})
for i in range(len(data)):
for j in range(len(data[i])):
worksheet.write(i, j, data[i][j], font)
# 关闭文件流
workbook.close()
总结
- 排序的原因在于,文件的顺序比较重要,python合并时默认的是按照字典排序1-10-11-12-···-2-3-4-5···,而不是1-2-3-···-10-20-···
- 如果不设置存放的文件,会覆盖原本的文件。