用 python 写入 Xlsx 文件 - Excel 文件上的空行
Write Xlsx file with python - Blank Lines on Excel file
我正在尝试编写 python 脚本来解析 excel sheet 中的文本文件。
在这个脚本中,我试图在 Xlsx 文件中编写一个列表列表,其中每个列表的元素都写在 Sheet.
的一行中
问题是当我有两个 equals 元素并且它们按顺序出现并使用两个 python 模块生成 excel 文件(xlsxwriter 和 openpyxl)时,它们只写了一个 equals 元素和他们写了一个空行而不是第二个元素。
示例:
输入列表为:
list = [['dog', 'cat', 'bat', 'jaguar'], ['dog', 'cat', 'bat', 'jaguar']]
excel文件是这样写的:
A B C D
1 dog cat bat jaguar
2 blank line
有谁知道我做错了什么吗?
这是我的代码:
def criaExcel(filename, regras):
nomeDoArquivo = filename.rstrip('.wri')+'.xlsx'
workbook = xlsxwriter.Workbook(nomeDoArquivo)
planilha = workbook.add_worksheet('Rules')
indice = ''
for regra in regras:
indice = str(regras.index(regra)+1)
planilha.write('A'+ indice, regra[0])
planilha.write('B'+ indice, regra[1])
planilha.write('C'+ indice, regra[2])
planilha.write('D'+ indice, regra[3])
planilha.write('E'+ indice, regra[4])
planilha.write('F'+ indice, regra[5])
planilha.write('G'+ indice, regra[6])
workbook.close()
def parseV3(filename):
manipulador = open(filename, 'r', encoding="Latin-1")
regras = []
regras.append(['Zona', 'Origem', 'Destino', 'Serviço', 'Ação', 'Status', 'Comentário'])
zona = origem = destino = servico = acao = status = comentario = ''
padraoCabecalho = re.compile('^Rule.+ (Allow|Deny) Service Any -> (.*) (\(Enabled\)|\(Disabled\))')
padraoInformacoes = re.compile('^\s{7,8}IP: (.*) -> (.*) .*')
padroaComentario = re.compile('^Comment: (.*)')
for linha in manipulador:
if linha.startswith('From '):
zonaTemp = linha.rstrip().lstrip('From ')
if zona == '':
zona = zonaTemp
elif zona != zonaTemp:
zona = zonaTemp
elif padraoCabecalho.match(linha):
objetos = padraoCabecalho.match(linha)
acao, servico, status = objetos.groups()
elif padraoInformacoes.match(linha):
objetos = padraoInformacoes.match(linha)
origem, destino = objetos.groups()
elif padroaComentario.match(linha):
objeto = padroaComentario.match(linha)
comentario = objeto.group(1)
regras.append([zona, origem, destino, servico, acao, status, comentario])
elif linha.rstrip() == '#Firewall : Access Rules_END':
break
manipulador.close()
criaExcel(filename, regras)
示例代码中存在一些问题。
首先是 index()
可能没有按照您认为的那样去做。更好的方法是使用 enumerate()
.
此外,您不必为 write()
使用(或创建)A1
样式字符串。它还接受 row, col
表示法,在这种情况下会更好。
例如:
import xlsxwriter
def criaExcel(filename, regras):
nomeDoArquivo = filename.rstrip('.wri')+'.xlsx'
workbook = xlsxwriter.Workbook(nomeDoArquivo)
planilha = workbook.add_worksheet('Rules')
for row_num, regra in enumerate(regras):
planilha.write(row_num, 0, regra[0])
planilha.write(row_num, 1, regra[1])
planilha.write(row_num, 2, regra[2])
planilha.write(row_num, 3, regra[3])
planilha.write(row_num, 4, regra[4])
planilha.write(row_num, 5, regra[5])
planilha.write(row_num, 6, regra[6])
workbook.close()
regras = [['dog', 'cat', 'bat', 'jaguar', 'cat', 'eel', 'cow'],
['dog', 'cat', 'bat', 'jaguar', 'cat', 'eel', 'cow']]
criaExcel('test.wri', regras)
输出:
我正在尝试编写 python 脚本来解析 excel sheet 中的文本文件。
在这个脚本中,我试图在 Xlsx 文件中编写一个列表列表,其中每个列表的元素都写在 Sheet.
的一行中问题是当我有两个 equals 元素并且它们按顺序出现并使用两个 python 模块生成 excel 文件(xlsxwriter 和 openpyxl)时,它们只写了一个 equals 元素和他们写了一个空行而不是第二个元素。
示例:
输入列表为:
list = [['dog', 'cat', 'bat', 'jaguar'], ['dog', 'cat', 'bat', 'jaguar']]
excel文件是这样写的:
A B C D
1 dog cat bat jaguar
2 blank line
有谁知道我做错了什么吗?
这是我的代码:
def criaExcel(filename, regras):
nomeDoArquivo = filename.rstrip('.wri')+'.xlsx'
workbook = xlsxwriter.Workbook(nomeDoArquivo)
planilha = workbook.add_worksheet('Rules')
indice = ''
for regra in regras:
indice = str(regras.index(regra)+1)
planilha.write('A'+ indice, regra[0])
planilha.write('B'+ indice, regra[1])
planilha.write('C'+ indice, regra[2])
planilha.write('D'+ indice, regra[3])
planilha.write('E'+ indice, regra[4])
planilha.write('F'+ indice, regra[5])
planilha.write('G'+ indice, regra[6])
workbook.close()
def parseV3(filename):
manipulador = open(filename, 'r', encoding="Latin-1")
regras = []
regras.append(['Zona', 'Origem', 'Destino', 'Serviço', 'Ação', 'Status', 'Comentário'])
zona = origem = destino = servico = acao = status = comentario = ''
padraoCabecalho = re.compile('^Rule.+ (Allow|Deny) Service Any -> (.*) (\(Enabled\)|\(Disabled\))')
padraoInformacoes = re.compile('^\s{7,8}IP: (.*) -> (.*) .*')
padroaComentario = re.compile('^Comment: (.*)')
for linha in manipulador:
if linha.startswith('From '):
zonaTemp = linha.rstrip().lstrip('From ')
if zona == '':
zona = zonaTemp
elif zona != zonaTemp:
zona = zonaTemp
elif padraoCabecalho.match(linha):
objetos = padraoCabecalho.match(linha)
acao, servico, status = objetos.groups()
elif padraoInformacoes.match(linha):
objetos = padraoInformacoes.match(linha)
origem, destino = objetos.groups()
elif padroaComentario.match(linha):
objeto = padroaComentario.match(linha)
comentario = objeto.group(1)
regras.append([zona, origem, destino, servico, acao, status, comentario])
elif linha.rstrip() == '#Firewall : Access Rules_END':
break
manipulador.close()
criaExcel(filename, regras)
示例代码中存在一些问题。
首先是 index()
可能没有按照您认为的那样去做。更好的方法是使用 enumerate()
.
此外,您不必为 write()
使用(或创建)A1
样式字符串。它还接受 row, col
表示法,在这种情况下会更好。
例如:
import xlsxwriter
def criaExcel(filename, regras):
nomeDoArquivo = filename.rstrip('.wri')+'.xlsx'
workbook = xlsxwriter.Workbook(nomeDoArquivo)
planilha = workbook.add_worksheet('Rules')
for row_num, regra in enumerate(regras):
planilha.write(row_num, 0, regra[0])
planilha.write(row_num, 1, regra[1])
planilha.write(row_num, 2, regra[2])
planilha.write(row_num, 3, regra[3])
planilha.write(row_num, 4, regra[4])
planilha.write(row_num, 5, regra[5])
planilha.write(row_num, 6, regra[6])
workbook.close()
regras = [['dog', 'cat', 'bat', 'jaguar', 'cat', 'eel', 'cow'],
['dog', 'cat', 'bat', 'jaguar', 'cat', 'eel', 'cow']]
criaExcel('test.wri', regras)
输出: