Python脚本没有将整行放在excel电子表格中

时间:2014-08-11 20:32:23

标签: python excel

我有一个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)。

很抱歉这个混乱。

1 个答案:

答案 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))