webentwicklung-frage-antwort-db.com.de

Schreiben und Lesen einer Liste aus einer Datei

Dies ist eine etwas seltsame Anfrage, aber ich suche nach einer Möglichkeit, eine Liste in eine Datei zu schreiben und sie dann ein anderes Mal zurückzulesen.

Ich habe keine Möglichkeit, die Listen neu zu erstellen, damit sie korrekt formatiert sind, wie das folgende Beispiel zeigt.

Meine Listen enthalten Daten wie die folgenden:

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)
36
Ryflex

Wenn Sie nicht möchten, dass es von Menschen gelesen/bearbeitet werden kann, ist die einfachste Lösung, pickle zu verwenden.

Schreiben:

with open(the_filename, 'wb') as f:
    pickle.dump(my_list, f)

Lesen:

with open(the_filename, 'rb') as f:
    my_list = pickle.load(f)

Wenn Sie do möchten, dass sie für Menschen lesbar sind, benötigen wir weitere Informationen.

Ob my_list ist garantiert eine Liste von Zeichenfolgen ohne eingebettete Zeilenumbrüche. Schreiben Sie einfach eine pro Zeile:

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write(s + '\n')

with open(the_filename, 'r') as f:
    my_list = [line.rstrip('\n') for line in f]

Wenn es sich eher um Unicode-Zeichenfolgen als um Byte-Zeichenfolgen handelt, möchten Sie sie encode. (Oder noch schlimmer, wenn es sich um Byte-Strings handelt, aber nicht unbedingt in derselben Codierung wie die Standardcodierung Ihres Systems.)

Wenn sie Zeilenumbrüche oder nicht druckbare Zeichen usw. enthalten, können Sie die Option "Escape" oder "Anführungszeichen" verwenden. Python hat verschiedene Arten von Escape-Operationen in die stdlib eingebaut.

Lass uns unicode-escape hier, um beide oben genannten Probleme gleichzeitig zu lösen:

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write((s + u'\n').encode('unicode-escape'))

with open(the_filename, 'r') as f:
    my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f]

Sie können die Lösung im 3.x-Stil auch in 2.x mit dem Modul codecs oder dem Modul io verwenden: *

import io

with io.open(the_filename, 'w', encoding='unicode-escape') as f:
    f.writelines(line + u'\n' for line in my_list)

with open(the_filename, 'r') as f:
    my_list = [line.rstrip(u'\n') for line in f]

* TOOWTDI, welcher Weg ist also naheliegend? Es kommt darauf an ... Für die Kurzversion: Wenn Sie mit Python Versionen vor 2.6 arbeiten müssen, verwenden Sie codecs; wenn nicht, verwenden Sie io.

100
abarnert

Solange Ihre Datei eine konsistente Formatierung aufweist (d. H. Zeilenumbrüche), ist dies mit einfachen Datei- IO und Zeichenfolgenoperationen einfach:

with open('my_file.txt', 'rU') as in_file:
    data = in_file.read().split('\n')

Dadurch wird Ihre Datendatei als Liste von Elementen gespeichert, eine pro Zeile. Um es dann in eine Datei zu packen, würden Sie das Gegenteil tun:

with open('new_file.txt', 'w') as out_file:
    out_file.write('\n'.join(data)) # This will create a string with all of the items in data separated by new-line characters

Hoffentlich passt das, wonach Sie suchen.

13
Derek Peterson

Definieren wir zuerst eine Liste:

lst=[1,2,3]

Sie können Ihre Liste direkt in eine Datei schreiben:

f=open("filename.txt","w")
f.write(str(lst))
f.close()

Um Ihre Liste zuerst aus einer Textdatei zu lesen, lesen Sie die Datei und speichern sie in einer Variablen:

f=open("filename.txt","r")
lst=f.read()
f.close()

Der Variablentyp lst ist natürlich string. Sie können diesen String mit der Funktion eval in ein Array konvertieren.

lst=eval(lst)
1
Ali Şentürk