Ich habe eine TXT-Datei mit Werten darin.
Die Werte sind wie folgt aufgelistet:
Value1
Value2
Value3
Value4
Mein Ziel ist es, die Werte in eine Liste aufzunehmen. Wenn ich das tue, sieht die Liste so aus:
['Value1\n', 'Value2\n', ...]
Der \n
wird nicht benötigt.
Hier ist mein Code:
t = open('filename.txt', 'r+w')
contents = t.readline()
alist = []
for i in contents:
alist.append(i)
Dies sollte tun, was Sie wollen (Dateiinhalt in einer Liste, zeilenweise, ohne\n)
with open(filename) as f:
mylist = f.read().splitlines()
Ich würde das machen:
alist = [line.rstrip() for line in open('filename.txt')]
oder:
with open('filename.txt') as f:
alist = [line.rstrip() for line in f]
Sie können .rstrip('\n')
verwenden, um nur Zeilenumbrüche am Ende der Zeichenfolge zu entfernen:
for i in contents:
alist.append(i.rstrip('\n'))
Alle anderen Whitespaces bleiben dabei erhalten. Wenn Sie sich nicht für Leerzeichen am Anfang und Ende Ihrer Zeilen interessieren, heißt der große, schwere Hammer .strip()
.
Da Sie jedoch aus einer Datei lesen und ohnehin alles in den Speicher ziehen , ist es besser, die Methode str.splitlines()
zu verwenden. Dadurch wird eine Zeichenfolge in Zeilentrennzeichen aufgeteilt und eine Liste von Zeilen ohne diese Trennzeichen zurückgegeben. Verwenden Sie dies für das Ergebnis file.read()
und verwenden Sie file.readlines()
überhaupt nicht:
alist = t.read().splitlines()
verwenden Sie für jede Zeichenfolge in Ihrer Liste .strip()
, um Leerzeichen am Anfang oder Ende der Zeichenfolge zu entfernen:
for i in contents:
alist.append(i.strip())
Abhängig von Ihrem Anwendungsfall ist es jedoch möglicherweise besser, etwas wie numpy.loadtxt
oder sogar numpy.genfromtxt
zu verwenden, wenn Sie ein nettes Array der Daten benötigen, die Sie aus der Datei lesen.
Nach dem Öffnen der Datei kann das Listenverständnis dies in einer Zeile tun:
fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()
Denken Sie daran, Ihre Datei danach zu schließen.
from string import rstrip
with open('bvc.txt') as f:
alist = map(rstrip, f)
Nota Bene: rstrip()
entfernt die Leerzeichen, das heißt: \f
, \n
, \r
, \t
, \v
, \x
und leer,
aber ich nehme an, Sie sind nur daran interessiert, die signifikanten Zeichen in den Zeilen zu belassen. Dann passt nur map(strip, f)
besser, und die Leerzeichen in der Überschrift werden ebenfalls entfernt.
Wenn Sie wirklich nur die Symbole NL \n
und RF \r
entfernen möchten, gehen Sie wie folgt vor:
with open('bvc.txt') as f:
alist = f.read().splitlines()
splitlines () ohne übergebenes Argument behält die Symbole NL und RF nicht bei (Windows zeichnet die Dateien mit NLRF am Zeilenende auf, zumindest auf meinem Computer), aber die anderen Leerzeichen, insbesondere die Leerzeichen und Tabs.
.
with open('bvc.txt') as f:
alist = f.read().splitlines(True)
hat den gleichen Effekt wie
with open('bvc.txt') as f:
alist = f.readlines()
das heißt, die NL und RF werden beibehalten
Ich hatte das gleiche Problem und fand die folgende Lösung sehr effizient. Ich hoffe, dass es Ihnen oder allen anderen hilft, die das Gleiche tun wollen.
Zunächst einmal würde ich mit einer "with" -Anweisung beginnen, da sie das ordnungsgemäße Öffnen/Schließen der Datei sicherstellt.
Es sollte ungefähr so aussehen:
with open("filename.txt", "r+") as f:
contents = [x.strip() for x in f.readlines()]
Wenn Sie diese Zeichenfolgen (jedes Element in der Inhaltsliste ist eine Zeichenfolge) in Integer oder Float konvertieren möchten, können Sie Folgendes tun:
contents = [float(contents[i]) for i in range(len(contents))]
Verwenden Sie int
anstelle von float
, wenn Sie in eine Ganzzahl konvertieren möchten.
Es ist meine erste Antwort in SO, also tut mir leid, wenn es nicht in der richtigen Formatierung ist.
Ich habe die Strip-Funktion verwendet, um das Newline-Zeichen loszuwerden, da geteilte Zeilen Speicherfehler in der 4-GB-Datei verursachten.
Beispielcode:
with open('C:\\aapl.csv','r') as Apple:
for apps in Apple.readlines():
print(apps.strip())
Ich habe dies kürzlich verwendet, um alle Zeilen aus einer Datei zu lesen:
alist = open('maze.txt').read().split()
oder Sie können dies für das gewisse Extra an Sicherheit verwenden:
with f as open('maze.txt'):
alist = f.read().split()
Es funktioniert nicht mit Leerzeichen zwischen Texten in einer einzelnen Zeile, aber es sieht so aus, als ob Ihre Beispieldatei keine Leerzeichen enthält, die die Werte aufteilen. Dies ist eine einfache Lösung, die eine genaue Liste von Werten zurückgibt und keine leere Zeichenfolge hinzufügt: ''
für jede leere Zeile, z. B. eine neue Zeile am Ende der Datei.
with open('D:\\file.txt', 'r') as f1:
lines = f1.readlines()
lines = [s[:-1] for s in lines]