我有一个Python脚本可以下拉HTML,从中删除我想要的部分,并给我一个看起来像这样的列表:
...
San Onofre SB
Otay Mesa
Platteville NB
Platteville SB
...
脚本的最后一部分将所有这些行放在Excel电子表格中的各自行中。这段代码看起来像这样:
print "Now let's put it in a spreadsheet..."
time.sleep(1)
f = open('Out.txt', 'r+') #The file that's created earlier in the script with the list
row_list = []
for row in f:
row_list.append(row.split())
column_list = zip(*row_list)
rb = open_workbook("CVO.xls",formatting_info=True)
r_sheet = rb.sheet_by_index(0)
wb = copy(rb)
w_sheet = wb.get_sheet(0)
i = 2
for column in column_list:
for item in range(len(column)):
w_sheet.write(item, i, column[item])
wb.save('CVO.xls')
i+=1
f.close()
os.remove("Out.txt")
print "Success!"
time.sleep(2)
结果看起来像这样:
...
San
Otay
Platteville
Platteville
...
我认为由于行分割的方式而忽略了部件,但我不确定如何使其包含整行。
有什么想法吗?
谢谢!
修改
目标是将整条生产线(San Onofre SB,Otay Mesa等)放在自己的行中。它现在就这样做了,除了第一个单词之外它只是减掉了所有(将San Onofre SB变成了San)。
很抱歉这个混乱。
答案 0 :(得分:1)
您的问题出在zip
上。 zip
截断到其最短的迭代次数,例如:
>>> zip(*[[1, 2, 3], [4, 5], [6, 7, 8]])
[(1, 4, 6), (2, 5, 7)]
幸运的是,您不需要zip
,我无法说明您为什么要这样做。要在单独的列中编写每个单词,只需遍历row_list
结构:
col_offset = 2
for (rownum, words) in enumerate(row_list):
for (colnum, word) in enumerate(words):
w_sheet.write(rownum, colnum + col_offset, word)
enumerate
为输入可迭代中的每个元素生成(index, pair)
值,以便自动在序列中移动。 col_offset
是因为enumerate
是0索引的,并且您的示例代码显示i=2
设置起始列。
如果您不希望单独列中的单词,请不要分割行 - 只需strip()
它们即可删除换行符。如果您必须拆分它们以进行上一次处理,请使用join()
重新组合它们:
colnum = 2
for (rownum, words) in enumerate(row_list):
w_sheet.write(rownum, colnum, ' '.join(words))