można odczytać cały plik i podziel linie używając str.splitlines
:
temp = file.read().splitlines()
Albo można pozbawić przełamane przez strony:
temp = [line[:-1] for line in file]
Uwaga: to ostatnie rozwiązanie działa tylko wtedy, gdy plik kończy się znakiem nowej linii, w przeciwnym razie ostatnia linia straci znak.
To przypuszczenie jest w większości przypadków prawdziwe (szczególnie w przypadku plików tworzonych przez edytory tekstu, które często do dodają i tak kończący znak nowej linii).
Jeśli chcesz tego uniknąć, można dodać do nowej linii na końcu pliku:
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]
Albo prostszym rozwiązaniem jest strip
znak nowej linii zamiast:
[line.rstrip('\n') for line in file]
Albo nawet, chociaż całkiem nieczytelne:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Który wykorzystuje fakt, że va lue z or
nie jest wartością boolowską, ale obiektem, który został oceniony jako prawdziwy lub fałszywy.
Sposób readlines
jest rzeczywiście równoważne:
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
Od readline()
utrzymuje nowalinia również readlines()
utrzymuje ją.
Uwaga: symetrii do readlines()
metoda writelines()
robi nie dodać kończące znaki nowej linii, więc f2.writelines(f.readlines())
tworzy dokładną kopię f
w f2
.
Zastosowanie taśmy: '[l.strip ('\ n \ r') na litr w temperaturze] '. Lub nawet "rstrip". A ponieważ iteracja jest tutaj, może to być 'in open' zamiast' in temp'. – gorlum0
To pytanie jest odpowiedzialne za każdą opinię o reputacji, którą mam – Yotam
Byłoby miło, gdyby w Pythonie 3 istniała wartość do ustawienia argumentu open 'newline' na te chompowane końcowe znaki nowej linii. – jxramos