383 Stimmen

Getting rid of \n when using .readlines()

Ich habe eine .txt-Datei mit Werten darin.

Die Werte sind wie folgt aufgeführt:

Value1
Value2
Value3
Value4

Mein Ziel ist es, die Werte in eine Liste zu setzen. Wenn ich das tue, sieht die Liste so aus:

['Value1\n', 'Value2\n', ...]

Das \n wird nicht benötigt.

Hier ist mein Code:

t = open('filename.txt')
contents = t.readlines()

15voto

askewchan Punkte 42747

Für jeden String in Ihrer Liste verwenden Sie .strip(), das Leerzeichen am Anfang oder Ende des Strings entfernt:

for i in contents:
    alist.append(i.strip())

Aber je nach Ihrem Anwendungsfall ist es möglicherweise besser, etwas wie numpy.loadtxt oder sogar numpy.genfromtxt zu verwenden, wenn Sie ein schönes Array der Daten benötigen, die Sie aus der Datei lesen.

11voto

eyquem Punkte 25545
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 Leerzeichen ,
Aber ich nehme an, dass Sie nur daran interessiert sind, die signifikanten Zeichen in den Zeilen zu behalten. Dann passt map(strip, f) besser, um auch die Leerzeichen am Anfang zu entfernen.


Wenn Sie wirklich nur die NL \n und RF \r Symbole eliminieren möchten, machen Sie:

with open('bvc.txt') as f:
    alist = f.read().splitlines()

splitlines() ohne übergebenes Argument behält nicht die NL und RF Symbole (Windows speichert die Dateien mit NLRF am Ende der Zeilen, zumindest auf meinem Rechner), behält jedoch die anderen Leerzeichen, insbesondere Leerzeichen und Tabs.

.

with open('bvc.txt') as f:
    alist = f.read().splitlines(True)

hat denselben Effekt wie

with open('bvc.txt') as f:
    alist = f.readlines()

das heißt, die NL und RF werden beibehalten

6voto

geo1230 Punkte 242

Ich hatte das gleiche Problem und habe die folgende Lösung gefunden, die sehr effizient ist. Ich hoffe, dass sie dir oder jedem anderen hilft, der dasselbe tun möchte.

Zunächst würde ich mit einer "with"-Anweisung beginnen, da sie das ordnungsgemäße Öffnen/Schließen der Datei gewährleistet.

Es sollte ungefähr so aussehen:

with open("filename.txt", "r+") as f:
    contents = [x.strip() for x in f.readlines()]

Wenn du diese Zeichenfolgen (jeder Eintrag in der Inhaltsliste ist eine Zeichenfolge) in Integer oder Float umwandeln möchtest, kannst du Folgendes tun:

contents = [float(contents[i]) for i in range(len(contents))]

Verwende int anstelle von float, wenn du in Integer umwandeln möchtest.

Es ist meine erste Antwort in SO, also entschuldige bitte, wenn sie nicht im richtigen Format ist.

2voto

micsthepick Punkte 555

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 ein wenig zusätzliche Sicherheit verwenden:

with f as open('maze.txt'):
    alist = f.read().split()

Es funktioniert nicht mit Leerzeichen zwischen Text in einer einzigen Zeile, aber es sieht so aus, als ob Ihre Beispieldatei die Werte nicht durch Leerzeichen trennt. Es ist eine einfache Lösung und gibt eine genaue Liste von Werten zurück und fügt keinen leeren String '' für jede leere Zeile hinzu, wie z.B. ein Zeilenumbruch am Ende der Datei.

-1voto

jperezmartin Punkte 407
mit open('D:\\file.txt', 'r') as f1:
    zeilen = f1.readlines()
zeilen = [s[:-1] for s in zeilen]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X