python \n - Lesen einer Datei ohne Zeilenumbrüche




ändern zeilenumbruch (6)

In Python aufrufen

temp = open(filename,'r').readlines()

ergibt eine Liste, in der jedes Element eine Zeile in der Datei ist. Es ist ein wenig dumm aber immer noch: readlines() schreibt auch Newline-Zeichen in jedes Element, etwas, das ich nicht passieren möchte. Wie kann ich es vermeiden?


Answers

Sie können die gesamte Datei lesen und Zeilen mit str.splitlines :

temp = file.read().splitlines()

Oder Sie können den Zeilenumbruch manuell entfernen:

temp = [line[:-1] for line in file]

Hinweis: Diese letzte Lösung funktioniert nur, wenn die Datei mit einem Zeilenumbruch endet, andernfalls verliert die letzte Zeile ein Zeichen.

Diese Annahme trifft in den meisten Fällen zu (insbesondere bei Dateien, die von Texteditoren erstellt werden, die jedoch häufig einen End-Zeilenumbruch hinzufügen).

Wenn Sie dies vermeiden möchten, können Sie am Ende der Datei einen Zeilenumbruch hinzufügen:

with open(the_file, 'r+') as f:
    f.seek(-1, 2)  # go at the end of the file
    if f.read(1) != '\n':
        # add missing newline if not already present
        f.write('\n')
        f.flush()
        f.seek(0)
    lines = [line[:-1] for line in f]

Oder eine einfachere Alternative ist, stattdessen den Zeilenumbruch zu entfernen:

[line.rstrip('\n') for line in file]

Oder sogar, obwohl ziemlich unlesbar:

[line[:-(line[-1] == '\n') or len(line)+1] for line in file]

Welche nutzt die Tatsache, dass der Rückgabewert von or ist kein Boolescher, sondern das Objekt, das als wahr oder falsch ausgewertet wurde.

Die readlines Methode entspricht tatsächlich:

def readlines(self):
    lines = []
    for line in iter(self.readline, ''):
        lines.append(line)
    return lines

# or equivalently

def readlines(self):
    lines = []
    while True:
        line = self.readline()
        if not line:
            break
        lines.append(line)
    return lines

Da readline() den Zeilenumbruch behält, behält auch readlines() es bei.

Hinweis: Für die Symmetrie von readlines() writelines() Methode writelines() keine abschließenden Zeilenumbrüche hinzu, sodass f2.writelines(f.readlines()) eine exakte Kopie von f in f2 .


import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])

temp = open(filename,'r').read().splitlines()

Versuche dies:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  

temp = open(filename,'r').read().split('\n')

Ein anderer Ansatz wäre die Verwendung der Zwei-Argumente-Form von iter :

from itertools import islice

def group(it, size):
    it = iter(it)
    return iter(lambda: tuple(islice(it, size)), ())

Dies kann leicht angepasst werden, um Padding zu verwenden (dies ist ähnlich der Antwort von Markus Jarderot ):

from itertools import islice, chain, repeat

def group_pad(it, size, pad=None):
    it = chain(iter(it), repeat(pad))
    return iter(lambda: tuple(islice(it, size)), (pad,) * size)

Diese können sogar für optionale Polsterung kombiniert werden:

_no_pad = object()
def group(it, size, pad=_no_pad):
    if pad == _no_pad:
        it = iter(it)
        sentinel = ()
    else:
        it = chain(iter(it), repeat(pad))
        sentinel = (pad,) * size
    return iter(lambda: tuple(islice(it, size)), sentinel)




python readlines