Lecture d'un fichier sans saut de ligne
En Python, appelant
temp = open(filename,'r').readlines()
Résultats dans une liste dans laquelle chaque élément est une ligne dans le fichier. C'est un peu stupide mais quand même: readlines()
écrit également un caractère de nouvelle ligne à chaque élément, quelque chose que je ne souhaite pas arriver. Comment puis-je l'éviter?
8 réponses
Vous pouvez lire le fichier entier et diviser les lignes en utilisant str.splitlines
:
temp = file.read().splitlines()
Ou vous pouvez dépouiller la nouvelle ligne à la main:
temp = [line[:-1] for line in file]
Note: cette dernière solution ne fonctionne que si le fichier se termine par une nouvelle ligne, sinon la dernière ligne perdra un caractère.
Cette hypothèse est vraie dans la plupart des cas (en particulier pour les fichiers créés par des éditeurs de texte, qui souvent font ajouter une nouvelle ligne de fin de toute façon).
Si vous voulez éviter cela, vous pouvez ajouter une nouvelle ligne à la fin du fichier:
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 une alternative plus simple est de strip
la nouvelle ligne à la place:
[line.rstrip('\n') for line in file]
Ou même, bien que assez illisible:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Qui exploite le fait que la valeur de retour de or
n'est pas un booléen, mais l'objet évalué true ou false.
La méthode readlines
est en fait équivalente à:
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
Puisque readline()
garde la nouvelle ligne aussi readlines()
La Garde.
Remarque: pour la symétrie de readlines()
le writelines()
la méthode n'ajoute pas de fin de ligne, donc f2.writelines(f.readlines())
produit une copie exacte de f
dans f2
.
import csv
with open(filename) as f:
csvreader = csv.reader(f)
for line in csvreader:
print(line[0])
Essayez ceci:
u=open("url.txt","r")
url=u.read().replace('\n','')
print(url)
my_file = open("first_file.txt", "r")
for line in my_file.readlines():
if line[-1:] == "\n":
print(line[:-1])
else:
print(line)
my_file.close()
Un autre exemple:
Lecture du fichier une ligne à la fois. Supprimer les caractères à partir de la fin de la chaîne str.rstrip(chars)
with open(filename, 'r') as fileobj:
for row in fileobj:
print( row.rstrip('\n') )
Voir aussi str.bande([caractères]) et str.lstrip([caractères])
(python > = 2.0)
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;