在表中单独编写变量,并使用其他变量的相应值

时间:2011-11-25 14:31:08

标签: python xlrd

好的,我的代码如下:

for shidx in xrange(0, book.nsheets):
print shidx
sheet = book.sheet_by_index(shidx)
d = sheet.col_values(0,2)
D = sheet.col_values(1,2)
dim = sheet.row_values(0,2)
if shidx == 0:
    #numLine = sheet.row_values(2)
    rs = sheet.col_values(6,2)
    for i in range(4):
        BB = sheet.col_values(2 + i, 2)
        if BB != 0:
            #print repr(d).rjust(2), repr(D).rjust(3), repr(BB).rjust(4), repr(rs).rjust(5)
            file = open("C:\\calcul\\SimX18_VitesseLimite\\Documents\\ncapa-20111116\\ncapa\\resources\\output.txt", "w")
            #file.write(str(table) + '\n')
            file.write(str(d) + '\n')
            file.write(str(D) + '\n')
            file.write(str(BB) + '\n')
            file.write(str(dim) + '\n')
            file.write(str(rs) + '\n')
            file.close()

当我尝试了一些不同的东西时,我已经将印刷品注释到最后。

我的目标是写入一个文本文件,每行对应一个表中的一列。 我的问题是分割d,D,dim和BB的列表。这就是我想做的事情:

dim和COLUMN的行:

dim = [17.0, 27.0, 37.0, 47.0, u'17-47'] (see table below for the first row and to what it corresponds)
d = [0.59999999999999998, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 15.0, 17.0, 20.0, 22.0, 25.0, 28.0, 30.0, 32.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0]

Table1 1

BB的第一个和第二个ROW:

BB = [0.8,0.0,0.0,0.0]    BB = [1.0,0.0,0.0,0.0]

我希望能够写入文本文件(相当于下面的表格):

Table2 2

然而对于BB的第三轮:

BB = [1.0,0.0,1.8,0.0]

我需要能够获得以下内容(即有两个“暗淡”选项):

Table3 3

当我说BB不等于0.0时,我希望能够将d,D,BB和dim的单个值写入表中,但我无法摆脱所有列表..

我真的希望这对某人有意义,因为我有点卡住了!

1 个答案:

答案 0 :(得分:0)

多次读数后,您的要求最终可以确定。但是,您的代码有几个问题:

显示的缩进是拙劣的。大概你在编辑器中使用选项卡。不要使用Python源文件。将其设置为每个缩进级别使用4个空格。

您正在迭代工作表但忽略除第一张工作表之外的所有工作表;为什么呢?

您正在使用dDrs来引用值列表,但不会迭代列表。

即使d引用了标量,但执行file.write(str(d) + '\n')等也无法实现每行5个值的文件目标。

如果在追加模式下打开,每个输出行打开/关闭输出文件一次效率非常低,并且非常低效且完全错误,因为你有它,在写模式下打开 - 你只能写最后一行

你需要考虑一下谁/什么会阅读/使用你的输出文件,以及他/她喜欢的格式。

够了。这是你应该做的(伪代码):

open your workbook
open your output file
for each sheet:
    get dim # a list
    for each data row:
        get d, D, and rs # three scalars
        for each bb value in the BB zone of the current row:
            if bb is non-zero:
                get the corresponding dim value (e.g. 27)
                write d, D, bb, dim_value, rs as 1 line to the output file
close your output file