2017-09-25 4 views
2

, vorausgesetzt, ich habe eine abgeflachte Liste (mit einer Länge = 135), wobei:Ich habe eine abgeflachte Liste in Python. Wie schreibe ich die Elemente der Liste in eine Datei und schränke die Anzahl der Elemente pro Zeile ein? So

matrix_e = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, ...] 

Ich mag würde die Elemente der Liste oben in eine Textdatei zu schreiben, aber ich kann nur maximal haben, 16 Elemente pro Zeile. Die Ausgabe sollte wie folgt in der Textdatei aussehen:

*Elset, elset = matrix 
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 
17,18,19,20,21,22,23,24,25,26,27,28,29,30,34,35, 
36,37,38, 

Für Kontext ich ein Netz erschaffe in Abaqus analysiert werden, und anscheinend dürfen Sie nur 16 Elemente pro Zeile in der Netzdatei.

Ist es möglich, eine while-Bedingung festzulegen, wenn Sie die Methode ',' .join verwenden?

Irgendwelche Ideen?

+0

Es gibt eine Million Möglichkeiten, dies zu tun. Sie können das Array beispielsweise in 16 Element-Chunks aufteilen. Welchen Code hast du ausprobiert? – RobertB

+1

Beachten Sie, dass auch für Datenleitungen ein Grenzwert von 256 Zeichen gilt. Daher sollten Sie die Anzahl auf 10 beschränken, um dies zu berücksichtigen. –

Antwort

1

Zunächst kann ich mich nicht erinnern, dass Abaqus nur 16 Elementnummern pro Zeile für Sätze benötigt, also sollten Sie das überprüfen.

Auf jeden Fall eine Möglichkeit, es zu tun ist, über die Liste, 16 Elemente eine Zeit iterieren:

import math 
n_lines = math.ceil(len(matrix_e)/16) 
lines = [] 

for i in range(n_lines): 
    lines.append(','.join([str(x) for x in matrix_e[16*i:16*i+16]])) 
+2

Ja, es gibt ein Limit für 16 Elemente. Es ist auch böse, Sie erhalten nur eine Warnung in der Datei dat, dass die zusätzlichen Elemente ignoriert wurden. – agentp

+1

Beachten Sie, dass bei dieser Antwort das abschließende Komma in jeder Zeile weggelassen wird, was eigentlich gut funktioniert (und besser aussieht). – agentp

3

Funktion chunks Splits Liste an bestimmten Größe. Indem wir es zu einer Funktion machen, machen wir Splitting-Integer dynamisch. das heißt, wir können 16 zu jeder anderen Zahl in Zukunft ändern, wenn dies erforderlich ist.
Wir schreiben es dann in eine Datei beim Konvertieren int zu str.

def chunks(l, n): 
    """Yield successive n-sized chunks from l.""" 
    for i in range(0, len(l), n): 
     yield l[i:i + n] 

matrix_e = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45] 


with open("out.txt", "w") as txtfile: 
    for l in list(chunks(matrix_e, 16)): 
     txtfile.write("{},\n".format(','.join([str(i) for i in l]))) 

Inhalt von "out.txt"

1,2,3,4,5,6,7,8,9,10,11,12,13,14, 15,16,
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
33,34,35,36,37, 38,39,40,41,42,43,44,45,

Verwandte Themen