J'ai plusieurs listes:L'écriture simultanée, dans plusieurs fichiers, les éléments de listes de différentes longueurs
VOLUMES = ['119.823364', '121.143469']
P0 = ['4.97568007', '4.98494429']
P2 = ['16.76591397', '16.88768068']
Xs = ['0.000000000000E+00', '3.333333333333E-01', '-4.090760942850E-01', '0.000000000000E+00', '3.333333333333E-01', '-4.093755657782E-01']
Ys = ['0.000000000000E+00', '-3.333333333333E-01', '-3.333333333333E-01', '0.000000000000E+00', '-3.333333333333E-01', '-3.333333333333E-01']
Zs = ['0.000000000000E+00', '-8.333333333333E-02', '-8.333333333333E-02', '0.000000000000E+00', '-8.333333333333E-02', '-8.333333333333E-02']
ATOMIC_NUMBERS = ['20', '6', '8', '20', '6', '8']
Et je voudrais générer 2 fichiers, du nom de l'élément de la liste VOLUMES
: 119.823364.dat
et 121.143469.dat
, tel que chacun contient les éléments suivants:
fichier 119.823364.dat
:
some stuff
other stuff
4.97568007 16.76591397
3
20 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00
6 3.333333333333E-01 -3.333333333333E-01 -8.333333333333E-02
8 -4.090760942850E-01 -3.333333333333E-01 -8.333333333333E-02
other stuff
some other stuff
fichier:
some stuff
other stuff
4.98494429 16.88768068
3
20 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00
6 3.333333333333E-01 -3.333333333333E-01 -8.333333333333E-02
8 -4.093755657782E-01 -3.333333333333E-01 -8.333333333333E-02
other stuff
some other stuff
Il y a la question suivante:
len(VOLUMES) = len(P0) = len(P2) = 2
Mais:
len(Xs) = len(Ys) = len(Zs) = 6
Je suis parvenu à réaliser la première partie:
# Remove *.dat files, to clean first:
for f in glob.glob("*.dat"):
os.remove(f)
# Create the files:
filenames = []
for V in VOLUMES:
filename = "{}.dat".format(V)
print 'filename = ', filename
filenames.append(filename)
print filenames
# Write to files:
for i in xrange(len(P0)):
with open(filenames[i],'w') as f:
f.write("""some stuff
other stuff\n""")
f.write("{} {}\n".format(P0[i], P2[i]))
f.write("{}\n".format(N_atom_irreducible_unit))
Ce qui crée les éléments suivants:
fichier 119.823364.dat
:
some stuff
other stuff
4.97568007 16.76591397
3
fichier 121.143469.dat
:
some stuff
other stuff
4.98494429 16.88768068
3
Je ne parviens pas à écrire les informations de Xs
, Ys
, Zs
et ATOMIC_NUMBERS
parce que ces 4 les listes ont une longueur différente des deux P0
et P2
.
j'ai réussi à ré-écrire Xs
, Ys
, Zs
et ATOMIC_NUMBERS
en un seul list of list of lists
:
for index_vol in range(len(VOLUMES)):
for index in range(len(ATOMIC_NUMBERS)):
atoms_per_frame = [ATOMIC_NUMBERS[index], Xs[index], Ys[index], Zs[index]]
atoms_all_frames[index_vol].append(atoms_per_frame)
print atoms_all_frames
qui imprime les éléments suivants:
[[['20', '0.000000000000E+00', '0.000000000000E+00', '0.000000000000E+00'], ['6', '3.333333333333E-01', '-3.333333333333E-01', '-8.333333333333E-02'], ['8', '-4.090760942850E-01', '-3.333333333333E-01', '-8.333333333333E-02'], ['20', '0.000000000000E+00', '0.000000000000E+00', '0.000000000000E+00'], ['6', '3.333333333333E-01', '-3.333333333333E-01', '-8.333333333333E-02'], ['8', '-4.093755657782E-01', '-3.333333333333E-01', '-8.333333333333E-02']], [['20', '0.000000000000E+00', '0.000000000000E+00', '0.000000000000E+00'], ['6', '3.333333333333E-01', '-3.333333333333E-01', '-8.333333333333E-02'], ['8', '-4.090760942850E-01', '-3.333333333333E-01', '-8.333333333333E-02'], ['20', '0.000000000000E+00', '0.000000000000E+00', '0.000000000000E+00'], ['6', '3.333333333333E-01', '-3.333333333333E-01', '-8.333333333333E-02'], ['8', '-4.093755657782E-01', '-3.333333333333E-01', '-8.333333333333E-02']]]
Je ne sais pas si la création de ce list of list of lists
est la solution pour pouvoir boucler avec for i in xrange(len(P0)):
mais je n'arrive pas à accomplir cela.
En pratique, la liste VOLUMES
aura une longueur d'environ 50 articles.
Vos '119.823364.dat' et' 121.143469.dat' sont identiques. –
@Arda Arslan Je viens d'éditer le post –