2 votes

Écriture d'une variable de la liste individuellement dans un tableau avec la valeur correspondante d'une autre variable

Ok, le code que j'ai est le suivant :

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()

J'ai commenté l'impression vers la fin car j'ai essayé plusieurs choses différentes.

Mon objectif est d'écrire dans un fichier texte dont chaque ligne correspond à une colonne d'un tableau. Mon problème est de diviser la liste pour d, D, dim et BB. Voici ce que je voudrais faire :

La LIGNE de dim et la COLONNE de d :

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

Et la première et la deuxième rangée de BB :

BB = [0. BB = [1.0, 0.0, 0.0, 0.0]

Je souhaite pouvoir écrire dans le fichier texte (l'équivalent d'un tableau comme ci-dessous) :

Table2 2

Toutefois, pour la troisième rangée de BB :

BB = [1.0, 0.0, 1.8, 0.0]

Je dois être en mesure d'obtenir ce qui suit (c'est-à-dire qu'il y a deux options "dim") :

Table3 3

Lorsque je dis que BB n'est pas égal à 0,0, je veux pouvoir écrire cette SEULE valeur pour d, D, BB et dim dans le tableau, mais je ne peux pas m'affranchir de toutes les listes...

J'espère vraiment que cela aura un sens pour quelqu'un, car je suis un peu coincé !

0voto

John Machin Points 39706

Votre besoin est finalement déterminé après plusieurs lectures. Cependant, votre code présente plusieurs problèmes :

L'indentation telle qu'elle est présentée est bâclée. Vous utilisez probablement des tabulations dans votre éditeur. Ne faites pas cela avec les fichiers sources Python. Configurez-le pour utiliser 4 espaces par niveau d'indentation.

Vous itérez sur les feuilles mais vous ignorez toutes les feuilles sauf la première ; pourquoi ?

Vous utilisez d , D y rs pour faire référence à des listes de valeurs, mais sans itérer sur ces listes.

Même si d se réfère à un scalaire comme il se doit, en faisant file.write(str(d) + '\n') etc n'est pas un moyen d'atteindre votre objectif d'un fichier avec 5 valeurs par ligne.

Ouvrir/fermer votre fichier de sortie une fois par ligne de sortie serait très inefficace si vous l'ouvrez en mode append, et est très inefficace et complètement faux tel que vous l'avez, ouvert en mode write -- vous n'obtiendrez jamais que la dernière ligne écrite.

Vous devez réfléchir à qui/qui va lire/consommer votre fichier de sortie, et au format qu'il/elle préférerait.

C'en est assez. Voici ce que vous devez faire (pseudocode) :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X