web-dev-qa-db-fra.com

Lire un fichier sans nouvelles lignes

En Python, appeler

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

résulte en une liste dans laquelle chaque élément est une ligne du fichier. C'est un peu stupide mais quand même: readlines() écrit aussi un caractère de nouvelle ligne sur chaque élément, ce que je ne souhaite pas. Comment puis-je l'éviter? 

260
Yotam

Vous pouvez lire le fichier entier et les lignes fractionnées en utilisant str.splitlines :

_temp = file.read().splitlines()
_

Ou vous pouvez décaper la nouvelle ligne à la main:

_temp = [line[:-1] for line in file]
_

Remarque: cette dernière solution ne fonctionne que si le fichier se termine par une nouvelle ligne, sinon la dernière ligne perd 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 font quand même une fin de nouvelle ligne).

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 consiste à strip la nouvelle ligne à la place:

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

Ou même, bien que très illisible:

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

Ce qui exploite le fait que la valeur de retour de or n’est pas un booléen, mais l’objet évalué comme étant vrai ou faux.


La méthode readlines équivaut en réalité à:

_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
_

Étant donné que readline() conserve la nouvelle ligne, readlines() la conserve également.

Remarque: pour la symétrie de readlines() la writelines() la méthode ne ne ajoute pas de fin newlines, alors f2.writelines(f.readlines()) produit une copie exacte de f in _f2_.

443
Bakuriu
temp = open(filename,'r').read().split('\n')
29
vivek
temp = open(filename,'r').read().splitlines()
8
Marcel

un autre exemple:

Lecture du fichier une ligne à la fois. Suppression des caractères indésirables avec 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.strip([chars]) et str.lstrip([chars])

(python> = 2.0)

3
O95

Essaye ça:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  
2
Nitesh Soni
import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])
1
srus
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() 
0
Necriss