将迭代的数组值添加到xlwt工作表

时间:2015-03-05 04:40:42

标签: python arrays for-loop spreadsheet xlwt

对于此数组中的每4个值,我希望它在忽略第一列时写入电子表格中的新行。这是因为我将从那里的单独数组中添加不同的值。

例如,我有五列:

A B C D E

然而A是禁区......

我有一组数字1-12,我想这样写:

A B C D E
  1 2 3 4
  5 6 7 8
  9 10 11 12

这些数字在我的实际代码中实际上不会按顺序排列,因此为什么某些形式的迭代可能必须在这里使用,而不是依赖于特定值的逻辑。

我在测试代码中接近这样的东西,但是8之后的值开始变得棘手,我假设它指的是4作为数组的成员而不是长度条件...

s1 = wb.add_sheet("Test")

s1.write(0, 0, "Col 1")
s1.write(0, 1, "Col 2")
s1.write(0, 2, "Col 3")
s1.write(0, 3, "Col 4")
s1.write(0, 4, "Col 5")

test_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
list2 = []
for val in test_list:
list2.append(str(val))

for c, col_val in enumerate(list2):
    for r, row_val in enumerate(col_val):
        if c + 1 > 4:
            s1.write(r + 1 + 1, c - 4 + 1, row_val)
        if c + 1 <= 4:
            s1.write(1, 1 + c, row_val)

如果有人有办法实现这一目标,请告诉我。

1 个答案:

答案 0 :(得分:1)

为了解决这个问题,我选了2台发电机。一个生成器给了我应该写的下一列,另一个生成器给了我应该写的下一行。发电机可能听起来令人生畏,但在这里它们确实简化了您所面临的问题(具有略低的内存占用优势)。

关键理念

(5列示例)

  • 您要编写的列号遵循序列1,2,3,4,1,2,3,4 ..
  • 您要编写的行号遵循序列1,1,1,1,2,2,2,2,...

所以你看到了这种模式?列和行都是独立的序列,可以使用生成器或简单循环获得。 (这会占用更多的记忆)

工作代码

s1 = wb.add_sheet("Test")

s1.write(0, 0, "Col 1")
s1.write(0, 1, "Col 2")
s1.write(0, 2, "Col 3")
s1.write(0, 3, "Col 4")
s1.write(0, 4, "Col 5")

test_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
list2 = []
for val in test_list:
    list2.append(str(val))

# Generator for column
def next_c_index():
    c = [1, 2, 3, 4]
    while True:
        for i in c:
            yield i

# Generator for row
def next_r_index(ncolumns=5):
    """
    Assumes you start from writing from 2nd row.
    :ncolumns = number of columns (default 5)
    Eg. 1, 1, 1, 1, 2, 2, 2, 2
    """
    n = 0
    r = 0
    while True:
        # In every cycle of 4
        if (n)%(ncolumns-1)==0:
            r += 1
        n += 1
        yield r

# Since you have 5 columns I pass 5 while calling row generator
row = next_r_index(ncolumns=5)
col = next_c_index()
for val in list2:
    s1.write(row.next(), col.next(), val)