În Python, de asteptare
temp = open(filename,'r').readlines()
rezultatele într-o listă în care fiecare element este o linie în fișier. Sale un pic stupid, dar încă: readlines ()
, de asemenea, scrie caracterul newline pentru fiecare element, ceva ce nu doresc să se întâmple.
Cum pot evita asta?
Puteți citi întregul dosar și split linii folosind str.splitlines
:
temp = file.read().splitlines()
Sau poate lipsi newline de mână:
temp = [line[:-1] for line in file]
Notă: această ultimă soluție funcționează numai dacă fișierul se termină cu o linie nouă, în caz contrar ultima linie va pierde un caracter.
Această ipoteză este adevărată, în cele mai multe cazuri (mai ales pentru fișierele create cu editoare de text, care de multe ori nu adăugați un final newline, oricum).
Dacă doriți să evita acest lucru, puteți adăuga o linie nouă la sfârșitul fișierului:
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]
Sau o alternativă mai simplă este de a "bandă" la linie nouă în loc:
[line.rstrip('\n') for line in file]
Sau chiar, deși destul de ilizibil:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Care exploatează faptul că valoarea de returnare a " sau " e't un boolean, dar obiectul care a fost evaluată true sau false.
Anii readlines
metoda este de fapt echivalent cu:
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
Din readline()
ține newline, de asemenea, readlines()
ține.
Notă: pentru simetrie readlines()
la writelines()
metoda nu nu adăugați final newline, deci f2.writelines(f.readlines())` produce o copie exactă a " f " la "f2".
un alt exemplu:
Citirea fișierului-un rând în timp. Eliminarea nedorite de caractere, cu de la sfârșitul string str.rstrip(caractere)
with open(filename, 'r') as fileobj:
for row in fileobj:
print( row.rstrip('\n') )
a se vedea, de asemenea, str.bandă([caractere]) " și " str.lstrip([caractere])
(python >= 2.0)
Încercați acest lucru:
u=open("url.txt","r")
url=u.read().replace('\n','')
print(url)
Pentru a elimina toate de conducere și la sfârșit spații goale (inspirat din Абага's a Răspunde) -
temp = [line.strip() for line in open("filename")]
Pentru a elimina toate trailing whitspaces inclusiv newline -
temp = [line.rstrip() for line in open("filename")]
Dacă doriți doar pentru a inlatura final newline și nu spații goale -
temp = [line.rstrip('\r\n') for line in open("filename")]
P. S., Dacă veți găsi că este util atunci vă rugăm să upvote-l la fel de bine.
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;