n bei Verwendung von .readlines() loswerden [duplicate]

Lesezeit: 6 Minuten

n bei Verwendung von readlines loswerden duplicate
TDNS

Ich habe eine TXT-Datei mit Werten darin.

Die Werte werden wie folgt aufgelistet:

Value1
Value2
Value3
Value4

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

['Value1n', 'Value2n', ...]

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)

  • Matrix verwenden[i][j] = map(int,sys.stdin.readline().split())

    – Vikas Kumar

    5. Juni 18 um 4:34 Uhr

  • Im Allgemeinen tun Sie nicht möchte zuerst alle Zeilen einlesen, in einem Puffer speichern und dann Zeilenumbrüche entfernen/ splitlines() – das verschwendet unnötig 2x Speicher, wenn die Datei groß ist. Sie wollen rstrip() Zeilenumbruch jeder Zeile, während Sie sie lesen und iterieren.

    – smci

    29. November 18 um 10:22 Uhr


n bei Verwendung von readlines loswerden duplicate
Benutzer3131651

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

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

  • meineliste = [i for i in mylist if i != ”]

    – TheRutubeify

    22. März 18 um 21:18 Uhr

  • Die von @bfrederix vorgeschlagene URL ist defekt. Hier eine Kopie von archive.org web.archive.org/web/20160215030807/http://axialcorps.com/2013/…

    – Paolo Melchiorre

    24. Oktober 18 um 9:45 Uhr

  • @Chiramisu Dieser Link scheint zu etwas zu führen, das nichts mit/unbeabsichtigt zu tun hat.

    – AMC

    15. Februar 20 um 1:02 Uhr

  • @AMC Du hast Recht, ich habe meine gelöscht, da Paolo Melchiorre bereits einen besseren Link zur archivierten Version gepostet hat.

    – Chiramisu

    15. Februar 20 um 4:25 Uhr

  • Beste Lösung für kleine Dateien.

    – Anselmo Blanco Domínguez

    4. Mai 21 um 16:14 Uhr

Ich würde das tun:

alist = [line.rstrip() for line in open('filename.txt')]

oder:

with open('filename.txt') as f:
    alist = [line.rstrip() for line in f]

  • Das kann mehr als nur abstreifen n.

    – gronostaj

    9. November 16 um 16:27 Uhr

  • Nachgestellte Leerzeichen (Leerzeichen, Tabulator, CR, LF usw.) sind meiner Erfahrung nach nie wünschenswert. Es gibt keine Daten oder Computersprache, mit der ich mich in über zwanzig Jahren befasst habe, die nachgestellte Leerzeichen wollte. Also, ja, es entfernt mehr als n. Die Chancen stehen gut, dass Sie es nicht verpassen werden.

    – Hughdbrown

    20. Januar 18 um 5:06 Uhr

  • Eine Situation, in der dies schaden könnte, wäre das Rechts-Strippen einer Datei mit tabulatorgetrennten Werten, in der einige Zeilen mehrere leere Werte in ihren Zellen ganz rechts hatten. Diese Zeilen hätten eine kürzere Länge als die anderen, wenn man auf t aufteilen würde …

    – duhaime

    2. Juni 18 um 18:46 Uhr

  • @duhaime Du wechselst irgendwie den Kontext. Wenn jemand fragen würde: “Wie kann ich eine Datei mit CR-getrennten Zeilen mit tabulatorgetrennten Feldern einlesen?” Ich würde auf jeden Fall die Verwendung des CSV-Moduls von Python empfehlen. Ich würde keine Tipps geben, die auf eine reine Textdatei mit CR-getrennten Datenzeilen anwendbar sind. Tabulatorgetrennte Werte sind also ein Umstand, in dem dies schlecht wäre, und wenn dies so angegeben wird, wäre diese Antwort niemals meine Empfehlung.

    – Hughdbrown

    3. Juni 18 um 19:18 Uhr

  • @hughdbrown Amen, ich wollte dies nur als mögliches Beispiel für gronostajs Kommentar kennzeichnen, da dies das erste Google-Ergebnis für das Entfernen von n mit Lesezeilen ist. Ihr Punkt wird aber verstanden!

    – duhaime

    4. Juni 18 um 13:27 Uhr

1644024367 358 n bei Verwendung von readlines loswerden duplicate
Martijn Pieters

Sie können verwenden .rstrip('n') zu nur Entfernen Sie Zeilenumbrüche am Ende der Zeichenfolge:

for i in contents:
    alist.append(i.rstrip('n'))

Dadurch bleiben alle anderen Leerzeichen intakt. Wenn Ihnen Whitespace am Anfang und Ende Ihrer Zeilen egal ist, dann ist der große schwere Hammer gerufen .strip().

Da Sie jedoch aus einer Datei lesen und alles in den Speicher ziehen ohnehinbesser zu verwenden str.splitlines() Methode; dies teilt einen String an Zeilentrennzeichen und gibt eine Liste von Zeilen ohne diese Trennzeichen zurück; Verwenden Sie dies auf der file.read() Ergebnis und nicht verwenden file.readlines() überhaupt:

alist = t.read().splitlines()

  • file.read().splitlines() macht den Job perfekt, aber ich muss diese Seite JEDES Mal besuchen, nur um mich daran zu erinnern, wie das geht. Gott, ich wünschte, sie hätten das auf eine intuitive Art und Weise aufgenommen file.readlines(newlines=False)

    – pcko1

    16. Dezember 2020 um 0:12 Uhr


  • @ pcko1: Ich glaube nicht, dass das intuitiver ist. Ich verwende das Dateiobjekt sowieso immer als Iterable (also würde ich verwenden list(file) anstatt file.readlines()) und wissen daher, dass Zeilenumbrüche zu erwarten sind. Versuchen Sie meistens, Zeilen aus einer Datei zu verarbeiten als Stromdurch Iterieren. for line in file: dosomething(line) oder [dosomething(line) for line in file]anstatt alle Zeilen in den Speicher zu lesen.

    – Martijn Pieters

    17. Dezember 2020 um 13:47 Uhr

Nach dem Öffnen der Datei kann List Comprehension dies in einer Zeile tun:

fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()

Denken Sie nur daran, Ihre Datei danach zu schließen.

Ich habe die Strip-Funktion verwendet, um das Zeilenumbruchzeichen zu entfernen, da geteilte Zeilen Speicherfehler in 4-GB-Dateien ausgelöst haben.

Beispielcode:

with open('C:\aapl.csv','r') as apple:
    for apps in apple.readlines():
        print(apps.strip())

  • Durch die Nutzung .readlines() Auf diese Weise iterieren Sie effektiv zweimal über die gesamte Datei und behalten gleichzeitig das Ganze im Speicher.

    – AMC

    15. Februar 20 um 1:05 Uhr

1644024368 5 n bei Verwendung von readlines loswerden duplicate
schiefchan

Verwenden Sie für jede Zeichenfolge in Ihrer Liste .strip() wodurch Leerzeichen am Anfang oder Ende der Zeichenfolge entfernt werden:

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

Aber abhängig von Ihrem Anwendungsfall sind Sie möglicherweise besser dran, wenn Sie etwas wie verwenden numpy.loadtxt oder auch numpy.genfromtxt wenn Sie ein schönes Array der Daten benötigen, die Sie aus der Datei lesen.

  • Durch die Nutzung .readlines() Auf diese Weise iterieren Sie effektiv zweimal über die gesamte Datei und behalten gleichzeitig das Ganze im Speicher.

    – AMC

    15. Februar 20 um 1:05 Uhr

1644024368 501 n bei Verwendung von readlines loswerden duplicate
eyquem

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 behalten. Dann bloß map(strip, f) passt besser, indem Sie auch die Leerzeichen der Überschrift entfernen.


Wenn du wirklich nur die NL eliminieren willst n und RF r Symbole, tun:

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

splitlines() ohne übergebenes Argument behält die NL- und RF-Symbole nicht bei (Windows zeichnet die Dateien mit NLRF am Zeilenende auf, zumindest auf meinem Computer), behält jedoch die anderen Leerzeichen bei, insbesondere die Leerzeichen und Tabulatoren.

.

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

hat die gleiche Wirkung wie

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

dh NL und RF bleiben erhalten

.

776650cookie-checkn bei Verwendung von .readlines() loswerden [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy