2017-08-22 1 views
1

Ich muss eine Nummer n von zufälligen Zeilen aus einer Textdatei nehmen und sie dann in eine neue Textdatei schreiben. Der Code funktioniert, aber die Zeilen werden mit einem anderen Format als in der Originaldatei aufgenommen und geschrieben, und ich möchte dasselbe beibehalten. Dieser ist der Code:Schlechte Formatierung mit random.sample

import random 

with open('textfile.dat') as f: 
    lines = random.sample(f.readlines(),100) #n=100 for example 

out=open('newfile.dat', 'w+') 
print >>out, lines 

Ein kleiner Teil textfile.dat:

626.0649 310.7645 122.8257 
626.1954 310.5412 123.0418 
627.0475 310.7212 123.2242 
626.6918 311.0145 123.6525 
... 

Und ein kleiner Teil newfile.dat:

['632.3587 304.9801 101.2915\n', '644.4067 307.2889 114.6692\n', '626.0014 312.0789 98.2628\n', '653.1418 307.1721 100.6861\n', ... 

Ich verwende Python 2.7 auf macOS. Wie kann ich es reparieren?

Antwort

3

Um ... das Gegenstück ist readlines ... Trommelwirbel ... writelines.

out.writelines(lines) 
1

Sie schreiben lines, was eine Liste ist, also wird es unter Verwendung der Listendarstellung gedruckt - mit Klammern um und Komma zwischen den Elementen. Was Sie wollen, erfordert Druck Elemente in einer Schleife, eins nach dem anderen:

for l in lines: 
    print >>out, l 

oder besser (da kompatibel mit Python3):

for l in lines: 
    out.write(l) 

Oh, und vergessen Sie nicht zu out.close()

+0

danke! Jetzt funktioniert es! –

0

Sie müssen jede Zeile auf einmal schreiben.

0

Sie schreiben die rohe Liste, anstatt jedes Element der Liste einzeln zu schreiben. Dies wird auch vorwärts kompatibel sein mit Python 3:

with open('textfile.dat') as in_f, open('newfile.dat', 'w+') as out_f: 
    out_f.writelines(random.sample(in_f.readlines(), 100)) 
+0

@Stefan: Danke - Ich habe vergessen, dass 'random.sample' einzigartige Elemente auswählt. Bearbeitet, um dem Code von OP zu entsprechen. – Billy