我做了一些腳本來修改數據並寫入xlsx。如何合併同一個數據單元?
我的文本文件有下面的數據。
WWN,Server Name,Server IP,SP port1,Storage Group1,SP port2,Storage Group2,LUN Count,LUN Capacity
8A:34,11B2,14,SP A_4,11B2,SP B_4,11B2,13,133
8A:36,11B2,14,SP A_8,11B2,SP B_8,11B2,13,133
8A:38,11B6,15,SP A_4,11B6,SP B_4,11B6,13,133
8A:3A,11B6,15,SP A_8,11B6,SP B_8,11B6,13,133
我想要使用關鍵數據合併相同的數據單元格。關鍵數據爲Storage Group1
。 如果Storage Group1
單元格具有相同的數據,將合併爲LUN count
LUN Capacity
。
下面是我的腳本不工作。
import sys
import pandas as pd
import xlsxwriter
##Add workbook and worksheet
workbook = xlsxwriter.Workbook('emc_pool.xlsx', {'strings_to_numbers': True})
worksheet = workbook.add_worksheet(u'Host')
##Add Cell Style
bold = workbook.add_format({'bold': True, 'border': 1})
border = workbook.add_format({'border': 1})
merge_format = workbook.add_format({'bold': True, 'border': 1,'align': 'center', 'valign': 'vcenter'})
##aliase information
port_file = 'last_emc.txt'
port_table = pd.read_table(port_file, encoding='utf_8', sep=',', header=None, names=['WWN','Server Name','Server IP','SP port1','Storage Group1','SP port2','Storage Group2','LUN Count','LUN Capacity'], lineterminator='\n')
worksheet.merge_range('A1:G1', u'Host', merge_format)
worksheet.write('A2', 'Server Name', bold)
worksheet.write('B2', 'Server IP', bold)
worksheet.write('C2', 'WWN', bold)
worksheet.write('D2', 'SP port1', bold)
worksheet.write('E2', 'Storage Group1', bold)
worksheet.write('F2', 'SP port2', bold)
worksheet.write('G2', 'Storage Group2', bold)
worksheet.write('H2', 'LUN count', bold)
worksheet.write('I2', 'LUN Capacity', bold)
data = (port_table)
row = 2
col = 0
data_dict = {}
count = 0
for index, temp_data in data.iterrows():
data_line = data_dict.setdefault(temp_data[4], [0])
data_line[0] += (count + 1)
for key, data in data_dict.items():
if index != 0:
worksheet.write(row, col, temp_data[1], border)
worksheet.write(row, col + 1, temp_data[2], border)
worksheet.write(row, col + 2, temp_data[0], border)
worksheet.write(row, col + 3, temp_data[3], border)
for temp_data[4] in [key]:
worksheet.merge_range(int(row) + map(int,data), col + 7, temp_data[7], border)
worksheet.merge_range(int(row) + map(int,data), col + 8, temp_data[8], border)
else:
worksheet.merge_range(row, col + 7, temp_data[7], border)
worksheet.merge_range(row, col + 8, temp_data[8], border)
worksheet.write(row, col + 4, temp_data[4], border)
worksheet.write(row, col + 5, temp_data[5], border)
worksheet.write(row, col + 6, temp_data[6], border)
row += 1
## Clocse Workbook
workbook.close()
我想讓結果在下面的圖片。
示例代碼在Python 2和3中引發錯誤。Python 2錯誤爲TypeError:不支持的操作數類型爲+:'int'和'list'...'。 – jmcnamara