it-swarm.com.de

\ N bei Verwendung von .readlines () entfernen

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)
199
TDNS

Dies sollte tun, was Sie wollen (Dateiinhalt in einer Liste, zeilenweise, ohne\n)

with open(filename) as f:
    mylist = f.read().splitlines() 
255
user3131651

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]
107
hughdbrown

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()
85
Martijn Pieters

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.

11
askewchan

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.

10
Lisle
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

9
eyquem

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.

4
geo1230

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())
3
Yogamurthy

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.

1
micsthepick
with open('D:\\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]
0
jperezmartin