2017-05-11 4 views
1

Ich generiere eine Menge String mit einer Schleife und ich muss diese Zeichenfolge in eine Datei schreiben. Ich möchte, dass meine Datei sortiert ist. Der folgende Code zeigt, was ich tun möchte:Wie füge ich eine Zeile in eine sortierte Datei ein?

#! /usr/bin/python2.7 
# -*- coding: utf-8 -*- 
my_file = open('my_file.txt', 'w') 

#randon_string and insert_in_order_alphabetically are just for the example 
for x in range(1,100000000): 
    my_string = random_string() 
    my_file.insert_in_alphabetical_order(my_string) 

my_file.close() 

Does Python haben Funktionen für dies tun oder Muss ich meine eigenen Algorithmus kodieren?

+2

ist es notwendig, sie in alphabetischer Reihenfolge _Enter_ - man konnte nur 'sort()' nachdem Sie alle Strings z in einer Liste? – patrick

+0

Wenn Sie etwas in eine Datei einfügen, müssen Sie den gesamten Inhalt anschließend an eine neue Position verschieben. Bei der großen Anzahl der Iterationen würde 'string_length * 100000000/2 * 100000000' Bytes im Durchschnitt neu geschrieben werden müssen. Sie müssen also die Sortierung im Speicher vornehmen. –

Antwort

0

Die klügste Sache zu tun wäre, die Datei als list zu lesen, fügen Sie alle zusätzlichen Zeichenfolgen hinzu und dann sort auf der Liste verwenden, bevor Sie in Datei umschreiben.

z. die Datei gegeben:

c 
c 
c 
a 
a 
b 
a 
a 

und der Code:

lines = [] 

with open('file.txt','r') as f: 
    for line in f: 
     lines.append(line.rstrip()) 

lines.append('z') 
lines.append('e') 
lines.append('e') 

lines.sort() 

with open('file.txt', 'w') as f: 
    for line in lines: 
     f.write(line + "\n") 

Dies erstellt die Datei:

a 
a 
a 
a 
b 
c 
c 
c 
e 
e 
z 
+0

Das Problem ist meine Größe Datei> 100Go und ich möchte vermeiden, meine Datei zu teilen und sortieren und die Splits zusammenführen. Ich denke, ich werde nur meinen eigenen Algorithmus schreiben. – sushi

Verwandte Themen