Em Python, chamando
temp = open(filename,'r').readlines()
resulta numa lista em que cada elemento é uma linha no ficheiro. É um pouco estúpido mas ainda assim: readlines()
também escreve um novo carácter de linha para cada elemento, algo que eu não desejo que aconteça.
Como posso evitá-lo?
Pode ler todo o ficheiro e linhas divididas utilizando str.splitlines
:
temp = file.read().splitlines()
Ou pode desnudar a nova linha à mão:
temp = [line[:-1] for line in file]
Nota: esta última solução só funciona se o ficheiro terminar com uma nova linha, caso contrário, a última linha perderá um carácter.
Esta suposição é verdadeira na maioria dos casos (especialmente para ficheiros criados por editores de texto, que frequentemente do adicionam uma nova linha final de qualquer forma).
Se quiser evitar isto, pode adicionar uma nova linha no final do ficheiro:
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]
Ou uma alternativa mais simples é "riscar", em vez disso, a nova linha:
[line.rstrip('\n') for line in file]
Ou mesmo, embora bastante ilegível:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
O que explora o facto de que o valor de retorno de ou
é'não um booleano, mas o objecto que foi avaliado como verdadeiro ou falso.
O método "readlines" é na realidade equivalente a:
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
Uma vez que readline()
mantém a nova linha também readlines()
mantém-na.
Note: para simetria a readlines()
o método writelines()
faz não adicionar novas linhas finais, portanto f2.writelines(f.readlines())
produz uma cópia exacta de f
em f2
.
outro exemplo:
A ler o ficheiro uma linha de cada vez.
Removendo caracteres indesejados com o final da string [str.rstrip(chars)
][1]
with open(filename, 'r') as fileobj:
for row in fileobj:
print( row.rstrip('\n') )
veja também str.strip([chars])
e str.lstrip([chars])
[1]: https://docs.python.org/2/library/stdtypes.html#str.rstrip
(python >= 2.0)
Experimenta isto:
u=open("url.txt","r")
url=u.read().replace('\n','')
print(url)
Para remover todos os espaços em branco principais e secundárias (inspirado em [Абага's Answer][1]) -
temp = [line.strip() for line in open("filename")]
Para remover todos os espaços vazios incluindo a nova linha -
temp = [line.rstrip() for line in open("filename")]
Se você só quer remover o trailing newline e não os espaços em branco...
temp = [line.rstrip('\r\n') for line in open("filename")]
P.S. Se você achar útil, então por favor, ele também pode ser convocado.
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;