In Python wird der Aufruf von
temp = open(filename,'r').readlines()
eine Liste, in der jedes Element eine Zeile in der Datei ist. Es ist ein bisschen dumm, aber trotzdem: readlines()
schreibt auch Zeilenumbrüche in jedes Element, was ich nicht möchte.
Wie kann ich das vermeiden?
Sie können die gesamte Datei lesen und Zeilen mit str.splitlines
aufteilen:
temp = file.read().splitlines()
Oder Sie können die Zeilenumbrüche von Hand entfernen:
temp = [line[:-1] for line in file]
Hinweis: Diese letzte Lösung funktioniert nur, wenn die Datei mit einem Zeilenumbruch endet, andernfalls wird die letzte Zeile ein Zeichen verlieren.
Diese Annahme ist in den meisten Fällen zutreffend (insbesondere bei Dateien, die mit Texteditoren erstellt wurden, die häufig ohnehin einen Zeilenumbruch am Ende einfügen).
Wenn Sie dies vermeiden wollen, können Sie einen Zeilenumbruch am Ende der Datei einfü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]
Eine einfachere Alternative ist es, den Zeilenumbruch stattdessen zu "entfernen":
[line.rstrip('\n') for line in file]
Oder sogar, obwohl ziemlich unleserlich:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Damit wird die Tatsache ausgenutzt, dass der Rückgabewert von "oder" kein Boolescher Wert ist, sondern das Objekt, das als wahr oder falsch bewertet wurde.
Die Methode readlines
ist eigentlich äquivalent zu:
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()
ihn.
Anmerkung: Aus Gründen der Symmetrie zu readlines()
fügt die writelines()
Methode keine endenden Zeilenumbrüche hinzu, so dass f2.writelines(f.readlines())
eine exakte Kopie von f
in f2
erzeugt.
def getText():
file=open("ex1.txt","r");
names=file.read().split("\n");
for x,word in enumerate(names):
if(len(word)>=20):
return 0;
print "length of ",word,"is over 20"
break;
if(x==20):
return 0;
break;
else:
return names;
def show(names):
for word in names:
len_set=len(set(word))
print word," ",len_set
for i in range(1):
names=getText();
if(names!=0):
show(names);
else:
break;