使用openpyxl将列表写入excel

时间:2017-03-05 23:38:57

标签: python openpyxl

更新的Python,全新的openpyxl - 我有一个大文本文件,我使用正则表达式来提取我需要的数据 - 现在我需要用openpyxl将该数据写入excel文件。文本文件是网络地址转换(NAT)表,看起来像

src_adtr:10.20.30.40 dst_adtr:185.50.40.50 src_adtr_translated:70.60.50.40 dst_adtr_translated:99.44.55.66

这四个元素将是excel文件的一行(我有大约500行需要写入)。

当我运行代码时,我没有收到任何错误,但它也没有做任何事情 - 我怎么能纠正这个?

import re
import openpyxl

with open("NAT-table.txt", "r") as f:
    text = f.read()

source = re.findall(r':src_adtr\s+.*\s+.*\s+:Name\s+[\(](.*)', text)
dest = re.findall(r':dst_adtr\s+.*\s+.*\s+:Name\s+[\(](.*)', text)
source_adtr = re.findall(r':src_adtr_translated.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+:Name\s+[\(](.*)', text)
dest_adtr = re.findall(r':dst_adtr_translated\s+.*\s+.*\s+.*\s*\s+.*\s+.*\s.*\s+:Name\s+[\(](.*)', text)
firewall = re.findall(r'\w+LINT\d+(?!_)', text) #'\w' includes the '_'(underscore) char

natRules = list(zip(source, dest, source_adtr, dest_adtr, firewall))
wb = openpyxl.load_workbook('NAT-table.xlsx')
sheet = wb.active
for i in range(2, sheet.max_row):
    for k in range(1, 5):
        for t in natRules:
            sheet.cell(row=i, column=k).value = natRules[i][k]
        #sheet.cell(row=rowNum, column=1).value = i

wb.save('NAT-table.xlsx')

1 个答案:

答案 0 :(得分:0)

您的示例数据与正则表达式不匹配,因此natRules为空。所以没有什么可写的。 我认为。我这样说是因为你的问题很难说清楚。

因此,由于没有可用的样本数据,因此很难确切地说出错了。我将指出这一部分:

for t in natRules:
    sheet.cell(row=i, column=k).value = natRules[i][k]

natRules上进行迭代,但不使用t。事实上,多次设置细胞。

测试代码:

这是一段测试代码,它使用您的基本循环,并成功编写xlsx文件。建议你慢慢修改它看起来像你的代码,但是你的数据会看到它停止工作的地方。

data = [list('abcd'), list('efgh')]
wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
for i, line in enumerate(data):
    for k, val in enumerate(line):
        sheet.cell(row=i+2, column=k+1).value = val
wb.save('test.xlsx')